正经题解|马的遍历
2024-03-22 11:12:08
发布于:浙江
155阅读
0回复
0点赞
【算法分析】
从马的位置开始广搜,由于求得是最少次数,则每个点只需要访问一次,并且在广搜的过程中记录次数。
【参考代码】
#include <bits/stdc++.h>
using namespace std;
int dis[409][409];
int dir[8][2] = { -2,-1,-2,1,-1,2,1,2,2,1,2,-1,1,-2,-1,-2 };
struct node {
int x, y;
}l,r;
int main() {
memset(dis, -1, sizeof(dis));
int n, m, x, y;
cin >> n >> m >> x >> y;
dis[x][y] = 0;
queue<node>q;
q.push({ x,y });
while (q.size()) {
r = q.front();
q.pop();
for (int i = 0; i < 8; i++) {
l.x = r.x + dir[i][0];
l.y = r.y + dir[i][1];
if (l.x >= 1 && l.x <= n && l.y >= 1 && l.y <= m && dis[l.x][l.y] == -1) {
dis[l.x][l.y] = dis[r.x][r.y] + 1;
q.push({ l.x,l.y });
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cout << dis[i][j] << " ";
}
cout << '\n';
}
return 0;
}
【时间复杂度】
【预计得分】
这里空空如也
有帮助,赞一个