首先来看一下题目描述:

题目描述

有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步

输入输出格式

输入格式:

一行四个数据,棋盘的大小和马的坐标

输出格式:

一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)

输入输出样例

输入样例#1:

3 3 1 1
输出样例#1:

0    3    2
3    -1   1
2    1    4    

好了很明显了这是一道搜索题。那么再来分析一下:是应该用深搜还是用广搜呢?那么再来回头看一下题目:要求输出最少的步数。这时我们就应该考虑深搜的可行性了:深搜是一次跑到底,不撞南墙不回头,那么只要搜寻到一个结果都会进行跳出,这种答案是随机的,那么在这里我们使用广搜。

首先来讲一下思路:考虑到马走日的行走规律,我们先定下一个dx和dy数组,用来储存方向。
]={,,,-,-,,-,,-};
]={,,,-,-,-,,-,};

然后是常规的一系列操作:定义地图map,进行搜索。

然后就是搜索函数search。函数的参数为x和y和ans,这里我们定义的返回时刻是一个阙值(定值),可以设定在150~200左右,因为到了这个阙值,地图必将遍历完成(由于数据范围大小的原因)。

然后就是搜索了,我们在函数里面定义一个参数ans用来记录最小步数,然后每次把map[x][y]=ans,这里的x,y是表示的当前的位置坐标,然后在不出界,map未走过的情况下,朝8个方向搜索,代码如下了:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
]={,,,-,-,,-,,-};
]={,,,-,-,-,,-,};
int n,m,horsex,horsey;
][];
void search(int x,int y,int ans)
{
    )
        return ;
    map[x][y]=ans;
    ;i<=;i++)
    {
        &&y+dy[i]>)
        if(x+dx[i]<=n&&y+dy[i]<=m)
        ||map[x+dx[i]][y+dy[i]]>ans+)
        search(x+dx[i],y+dy[i],ans+);
    }
}
int main()
{
    cin>>n>>m>>horsex>>horsey;
    ;i<=n;i++)
     ;j<=m;j++)
      map[i][j]=-;
    search(horsex,horsey,);
    ;i<=n;i++)
    {
        ;j<=m;j++)
           printf("%-5d",map[i][j]);
        printf("\n");
    }
    ;
}
 

[luoguP1443]马的遍历的更多相关文章

  1. 马的遍历问题-回溯法应用-ACM

    马的遍历问题 在n*m的棋盘中,马只能走“日” 字.马从位置(x,y)处出发,把棋盘的每一格都走一次,且只走一次.找出所有路径. 问题解的搜索空间? 棋盘的规模是n*m,是指行有n条边,列有m条边. ...

  2. 洛谷 P1443 马的遍历

    P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...

  3. 最少步数&P1443 马的遍历

      1330:[例8.3]最少步数 s数组:记录(1,1)到达每一点需要的最少步数 s[1][1]自然为 0,其余初始化为 -1 que数组:que[#][1] 表示(1,1)可到达点的 x 坐标 q ...

  4. 【bfs】洛谷 P1443 马的遍历

    题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...

  5. 马的遍历 洛谷 p1443

    题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...

  6. 洛谷P1443 马的遍历

    https://www.luogu.org/problemnew/show/P1443 很经典的搜索题了,蒟蒻用广搜打的 不说了,上代码! #include<bits/stdc++.h> ...

  7. 【洛谷】P1443 马的遍历

    题目:https://www.luogu.org/problemnew/show/P1443 简单的BFS模板题——因为我写出来了. 分析过程: n*m矩阵,用二维数组 数据不大,二维数组稳了 先把二 ...

  8. 【洛谷P1443 马的遍历】

    题目链接(%%%jyy大佬) 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数 ...

  9. 洛谷 P1443 马的遍历

    终于遇到一个简单纯粹一点的bfs了...... 题目链接:https://www.luogu.org/problemnew/show/P1443 题目是求到达一个点的最短步数 也就是说我只要bfs遍历 ...

随机推荐

  1. mongodb随机查询一条记录的正确方法!

    关于从mongodb库中随机取出一条记录的方法的博文很多,其中都提到了下面三种方法: 1.skip过随机数量的记录. DBCursor cursor = coll.find(query); int r ...

  2. nyoj 325——zb的生日——————【dp】

    zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...

  3. ajax数据获取与传送

    function service_ajax(){ var migrate_style = $('#myTab').find('.active').attr('value'); //jquery获取页面 ...

  4. Unity 基础

    Unity 基础是unity入门的关键.他将讲解Unity的界面, 菜单项,使用资源,创设场景,并发布版本. 当你读完这段,你将理解unity是怎么工作的,如何有效地使用它,并且完成一个基本的游戏. ...

  5. List< >泛型集合

    //一旦你确定了泛型的类型,集合里的元素已经有了确切的定义 List<int> list = new List<int>();  //创建泛型集合的对象 list.Add(); ...

  6. Junit入门教程

    做开发的时候,完成一个接口.方法.函数或者功能等,需要测试,是否有bug,有逻辑错误.这里有两种方案测试 1. 在main中写测试方法 2. 使用开源框架,这里使用的junit main写测试方法优点 ...

  7. PAT 1076 Forwards on Weibo

    #include <cstdio> #include <cstdlib> #include <vector> #include <queue> #inc ...

  8. jQuery三——筛选方法、事件

    一.jquery常用筛选方法 以下为jquery的常用筛选方法: 代码示例如下: <!DOCTYPE html> <html lang="en"> < ...

  9. stark——增删改页面

    一.制作添加页面 1.前置准备 (1)修改增删改的视图函数名 class ModelStark(object): def add_view(self, request): return HttpRes ...

  10. dpkg 打包root权限app

    dpkg 安装Macports 下载对应系统的Macports安装时间会比较久,安装完毕后放在了/opt/local/bin 目录下 安装dpkg 打开终端,输入 sudo port -f insta ...