这道题以前A过,然后最近在复建重新写了一遍,结果发现以前能A的代码已经A不了了,全显示RE,具体可见RE代码,以及以前的AC代码,我应该是把代码公开打开了吗,如果看不到可以看这个
#include<bits/stdc++.h>
using namespace std;
int dx[] = {-2, -1, 1, 2, 2, 1, -1, -2};
int dy[] = {1, 2, 2, 1, -1, -2, -2, -1};
int n,m,sx,sy,ans[405][405];
bool vis[405][405];
struct node{
int x,y,step;
};
queue<node> q;
bool check(int x,int y){
return x >= 1 && x <= n && y >= 1 && y <= m;
}
void bfs(){
queue<node> q;
vis[sx][sy] = true;
ans[sx][sy] = 0;
q.push((node){sx,sy,0});
while (!q.empty()){
node tmp = q.front();
q.pop();
int x = tmp.x, y = tmp.y, step = tmp.step;
for (int i = 0;i <= 8;i++){
int nx = x + dx[i], ny = y + dy[i];
if (check(nx,ny) && !vis[nx][ny]){
vis[nx][ny] = true;
ans[nx][ny] = step + 1;
q.push((node){nx,ny,step+1});
}
}
}
}
int main()
{
cin >> n >> m >> sx >> sy;
memset(vis,false,sizeof(vis));
for (int i = 1;i <= n;i++){
for (int j = 1;j <= m;j++){
ans[i][j] = -1;
}
}
bfs();
for (int i = 1;i <= n;i++){
for (int j = 1;j <= m;j++){
printf("%-5d", ans[i][j]);
}
cout << endl;
}
return 0;
}
因为是RE所以我思考了一下数组越界的问题,然后看了一眼数据发现是400但是我数组开的405,后来改成410依旧是RE。不知道到底怎么办看了一下用来控制快速加减位置求坐标的数组的数组个数,详见代码第四第五行,分别写了一个10进去后AC了,详见再次AC代码,然后AC了
现在想请问一下各位dalao为什么会出现这种情况呢,求解答,违规紫衫