|
发表于 2024-4-5 14:22:33
|
显示全部楼层
题目:# 马的遍历
## 题目描述
有一个 $n \times m$ 的棋盘,在某个点 $(x, y)$ 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。
## 输入格式
输入只有一行四个整数,分别为 $n, m, x, y$。
## 输出格式
一个 $n \times m$ 的矩阵,代表马到达某个点最少要走几步(不能到达则输出 $-1$)。
## 样例 #1
### 样例输入 #1
```
3 3 1 1
```
### 样例输出 #1
```
0 3 2
3 -1 1
2 1 4
```
答案:
#include <bits/stdc++.h>
using namespace std;
int n,m;
char a[105][105];
int d[8][2] = {{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,-1},{-2,1}};
int vis[105][105];
struct node {
int x;
int y;
int setp;
} q[105];
int xs,ys;
int xe,ye;
void bfs(int xe, int ye) {
int head = 1;
int tail = 1;
q[tail].x = 1;
q[tail].y = 1;
q[tail].setp = 0;
tail ++;
vis[1][1] = 1;
while (head < tail) {
int x0 = q[head].x;
int y0 = q[head].y;
int setp0 = q[head].setp;
if (x0 == xe && y0 == ye) {
cout << setp0 <<" ";
return ;
}
for (int i = 0; i < 8; i++) {
int nx = x0 + d[i][0];
int ny = y0 + d[i][1];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && vis[nx][ny] != 1) {
q[tail].x = nx;
q[tail].y = ny;
q[tail].setp = setp0 + 1;
tail++;
vis[nx][ny] = 1;
}
}
head++;
}
cout<<"-1 ";
}
int main() {
cin>>n>>m;
cin >> xe >> ye;
for(int i = 1;i<=n;i++){
for(int j = 1;j<=m;j++){
bfs(i,j);
memset(vis,0,sizeof(vis));
}
cout<<endl;
}
return 0;
}
请问哪里出错了
@FishC |
|