马的遍历(BFS

https://www.luogu.org/problemnew/show/P1443

模板BFS......

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<string>
 7 #include<cmath>
 8 #include<set>
 9 #include<vector>
10 #include<stack>
11 #include<queue>
12 #include<map>
13 using namespace std;
14 #define ll long long
15 #define se second
16 #define fi first
17 const int INF= 0x3f3f3f3f;
18 const int N=1e5+5;
19
20 int n,m,a,b;
21 int dx[8]={2,2,1,1,-2,-2,-1,-1},dy[8]={1,-1,2,-2,1,-1,2,-2};
22 int step[405][405];
23 bool vis[405][405];
24
25 struct note
26 {
27     int x,y;
28     int s;
29 }w,p;
30
31 queue<note>q;
32
33 void bfs(int ax,int ay)
34 {
35     w.x=ax; w.y=ay; w.s=0;
36     vis[w.x][w.y]=1;
37     step[w.x][w.y]=w.s;
38
39     q.push(w);
40     while( !q.empty())
41     {
42         p=q.front();
43         q.pop();
44         for(int i=0;i<8;i++)
45         {
46             w.x=p.x+dx[i];
47             w.y=p.y+dy[i];
48             if(w.x<=n&&w.x>=1&&w.y<=m&&w.y>=1&&vis[w.x][w.y]==0)
49             {
50                 vis[w.x][w.y]=1;
51                 w.s=p.s+1;
52                 step[w.x][w.y]=w.s;
53                 q.push(w);
54             }
55         }
56     }
57 }
58
59 int main()
60 {
61     cin>>n>>m>>a>>b;
62     memset(step,-1,sizeof(step));
63     bfs(a,b);
64     for(int i=1;i<=n;i++){
65         for(int j=1;j<=m;j++)
66             printf("%-5d",step[i][j]);
67         cout<<endl;
68     }
69 }

原文地址:https://www.cnblogs.com/thunder-110/p/9317130.html

时间: 2024-10-08 22:02:39

马的遍历(BFS的相关文章

P1443 马的遍历

P1443 马的遍历 题目描述 有一个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 #include<iostream> #include<cstdio>

马的遍历

题目链接 首先,这是一道水题.(虽然我提交了四次才A掉) 思路是很简单的.马的遍历,经典中的经典,一想就是搜索.但流传较广的是DFS,第一直觉也是DFS.可是,一看题,求马到各点的最短路,是求最优解,且是各个点,自然想到了BFS. BFS的简单思路,将矩阵每个点 原文地址:https://www.cnblogs.com/qing1/p/11066106.html

马的遍历问题

题意例如以下: 马的遍历问题.设计程序完毕例如以下要求: 在中国象棋棋盘上,对任一位置上放置的一个"马". 均能选择一个合适的路线,使得该棋子能按象棋的规则 不反复地走过棋盘上的每一位置. 思路:这是一个DFS搜索,然后没有使用另外的数组来标记某一位置是否已经被走过,而是直接使用存步数的数组num[][]来作为标记数组! 然后我使用了两个数组作为方向坐标,以便能让马移动,同一时候也能记录马所在位置的坐标!(马是能够从8个移动方向中选择的!) 代码还是非常好理解的! 至于棋盘的规格能够自

广度优先遍历-BFS、深度优先遍历-DFS

广度优先遍历-BFS 广度优先遍历类似与二叉树的层序遍历算法,它的基本思想是:首先访问起始顶点v,接着由v出发,依次访问v的各个未访问的顶点w1 w2 w3....wn,然后再依次访问w1 w2 w3....wn的所有未被访问的邻接顶点:再从这些访问过的顶点出发,再访问它们所有未被访问过的邻接顶点......依次类推,直到图中的所有点都被访问为止.类似的思想还将应用于Dijkstra单源最短路径算法和Prim最小生成树算法. python实现二叉树的建立以及遍历(递归前序.中序.后序遍历,队栈前

Luogu1443 马的遍历【STL通俗BFS】

喜闻乐见当做BFS的STL模板做了 qwq我这样的蒟蒻也就只能发发模板题 #include<cstdio> #include<cstring> #include<cmath> #include<queue> using namespace std; struct xy{ int x,y; }node,top; int dx[8]={1,1,2,2,-1,-1,-2,-2}; int dy[8]={2,-2,1,-1,2,-2,1,-1}; int a[405

图的创建和遍历(BFS/DFS)

图的表示方法主要有邻接矩阵和邻接表.其中邻接表最为常用,因此这里便以邻接表为例介绍一下图的创建及遍历方法. 创建图用到的结构有两种:顶点及弧 struct ArcNode { int vertexIndex; //该弧指向的顶点位置 struct ArcNode* next; //指向下一个弧 InfoType info; //该弧的相关信息,如权重等 }; struct Vertex { VertexType data; //顶点信息 ArcNode* firstArc; //指向第一条依附该

洛谷——P1443 马的遍历

https://www.luogu.org/problem/show?pid=1443#sub 题目描述 有一个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 1 #include

图的广度优先/层次 遍历(BFS) c++ 队列实现

在之前的博文中,介绍了图的深度优先遍历,并分别进行了递归和非递归实现.BFS 无法递归实现,最广泛的实现是利用队列(queue).这与DFS的栈实现是极其相似的,甚至代码几乎都很少需要改动.从给定的起点节点开始,依次将其邻接节点全部塞入队列,每次访问一个节点时将其pop()出队列,并将其邻接节点也塞入队列.直到队列为空,算法结束. 代码实现并无太大障碍,c++实现: 1 #include <iostream> 2 #include <queue> 3 using namespace

1443 马的遍历

难度:普及/提高- 题目类型:BFS 提交次数:5 涉及知识:BFS 题目描述 有一个n*m的棋盘(1<n,m<=200),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出格式: 一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1) 代码: #include<iostream> #include<queue> #include<cstring>