【洛谷 P1443】马的遍历 题解(广度优先搜索)
创始人
2024-05-30 22:15:53
0

马的遍历

题目描述

有一个 n×mn \times mn×m 的棋盘,在某个点 (x,y)(x, y)(x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。

输入格式

输入只有一行四个整数,分别为 n,m,x,yn, m, x, yn,m,x,y。

输出格式

一个 n×mn \times mn×m 的矩阵,代表马到达某个点最少要走几步(不能到达则输出 −1-1−1)。

样例 #1

样例输入 #1

3 3 1 1

样例输出 #1

0    3    2    
3    -1   1    
2    1    4

提示

数据规模与约定

对于全部的测试点,保证 1≤x≤n≤4001 \leq x \leq n \leq 4001≤x≤n≤400,1≤y≤m≤4001 \leq y \leq m \leq 4001≤y≤m≤400。

思路

  1. 马走“日”
  2. 输出格式:域宽为5,左对齐
  3. 注意判断是否越界

AC代码

#include 
#include 
#include 
#define AUTHOR "HEX9CF"
using namespace std;const int maxn = 405;
const int sun[8][2] = {-2, 1, -2, -1, -1, 2, -1, -2, 2, 1, 2, -1, 1, 2, 1, -2};
int n, m, x, y;bool vis[maxn][maxn];
int stp[maxn][maxn];
queue> q;void bfs(int x, int y)
{vis[x][y] = 1;stp[x][y] = 0;q.push(make_pair(x, y));while (!q.empty()){pair f = q.front();q.pop();for (int i = 0; i < 8; i++){int xx = f.first + sun[i][0];int yy = f.second + sun[i][1];if (xx > 0 && xx <= n && yy > 0 && yy <= m && !vis[xx][yy]){vis[xx][yy] = 1;q.push(make_pair(xx, yy));stp[xx][yy] = stp[f.first][f.second] + 1;}}}
}int main()
{memset(vis, 0, sizeof(vis));memset(stp, -1, sizeof(stp));cin >> n >> m >> x >> y;stp[x][y] = 0;vis[x][y] = true;q.push(make_pair(x, y));bfs(x, y);for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){printf("%-5d", stp[i][j]);}putchar('\n');}return 0;
}

相关内容

热门资讯

骑士和公主的爱情故事之类的电影 骑士和公主的爱情故事之类的电影魔法灰姑娘 公主新娘 金玫瑰洞 魔法奇缘
鼎捷数智跌2.04%,成交额1... 7月7日,鼎捷数智盘中下跌2.04%,截至13:17,报34.08元/股,成交1.27亿元,换手率1...
日产汽车考虑40亿美元的债券发...   据报道,日产汽车正考虑发售总计价值约40亿美元的美元、欧元和日元计价债券。  该公司正在考虑发行...
力芯微跌2.01%,成交额39... 7月7日,力芯微盘中下跌2.01%,截至13:19,报38.59元/股,成交3945.95万元,换手...
同洲电子2025年7月7日涨停... 2025年7月7日,同洲电子(sz002052)触及涨停,涨停价12.42元,涨幅10.01%,总市...
光明地产跌2.28%,成交额8... 7月7日,光明地产盘中下跌2.28%,截至13:20,报3.43元/股,成交8587.97万元,换手...
副部级领导调研闽源钢铁集团 7月3日,河南省政协副主席张震宇一行莅临闽源钢铁集团有限公司,开展“学查改·以企观政”服务走访调研活...
省创新典型!邢台8人6案例入选 转自:邢台发布省科技型企业家、企业“创新达人”、企业典型创新案例选树结果公布我市8人6案例入选近日,...
舜禹股份涨2.05%,成交额1... 7月7日,舜禹股份盘中上涨2.05%,截至13:02,报13.95元/股,成交1665.86万元,换...
永悦科技涨2.06%,成交额3... 7月7日,永悦科技(维权)盘中上涨2.06%,截至13:04,报6.44元/股,成交3028.39万...