P1443 马的遍历

Posted -ackerman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1443 马的遍历相关的知识,希望对你有一定的参考价值。

题目链接:https://www.luogu.org/problem/P1443

 

思路:

这题主要是这??可以走的地方太多了,需要考虑清楚每一种情况,方向数组不要有遗漏

 

 1 #include <math.h>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <iostream>
 5 #include <algorithm>
 6 #include <string>
 7 #include <string.h>
 8 #include <vector>
 9 #include <map>
10 #include <stack>
11 #include <set>
12 #include <queue>
13 
14 
15 #define LL long long
16 #define INF 0x3f3f3f3f
17 #define ls nod<<1
18 #define rs (nod<<1)+1
19 const int maxn = 500;
20 const double eps = 1e-9;
21 
22 int n,m,sx,sy;
23 int dis[maxn][maxn];
24 int dirx[9] = {0,2,-2,2,-2,-1,1,-1,1},diry[9]={0,1,1,-1,-1,2,2,-2,-2};
25 
26 std::queue<std::pair<int,int> > q;
27 
28 int main() {
29     scanf("%d%d%d%d",&n,&m,&sx,&sy);
30     memset(dis,-1, sizeof(dis));
31     dis[sx][sy] = 0;
32     q.push(std::make_pair(sx,sy));
33     while (!q.empty()) {
34         int x = q.front().first;
35         int y = q.front().second;
36         q.pop();
37         for (int i=1;i<=9;i++) {
38             int new_x = x + dirx[i];
39             int new_y = y + diry[i];
40             if (new_x >= 1 && new_x <= n && new_y >= 1 && new_y <= m && dis[new_x][new_y] == -1) {
41                 dis[new_x][new_y] = dis[x][y] + 1;
42                 q.push(std::make_pair(new_x,new_y));
43             }
44         }
45     }
46     for(int i = 1;i <= n; ++i) {
47         for(int j = 1;j <= m; ++j)
48             printf("%-5d", dis[i][j]);
49         printf("
");
50     }
51     return 0;
52 }

 

以上是关于P1443 马的遍历的主要内容,如果未能解决你的问题,请参考以下文章

P1443 马的遍历

P1443 马的遍历

P1443 马的遍历

P1443 马的遍历

洛谷——P1443 马的遍历

洛谷 P1443 马的遍历