試了好多遍,全WA,有大佬給此蒟蒻思路嗎
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1001][1001],ans[1001][1001];
char c;
int fx[5]={0,0,1,0,-1},fy[5]={0,1,0,-1,0};
int main(){
memset(ans,-1,sizeof(ans));
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>c;
a[i][j]=int(c-48);
}
}
for(int k=1;k<=m;k++){
int i1,j1;
int f;
scanf("%d%d",&i1,&j1);
if(ans[i1][j1]==-1){
f=a[i1][j1];
int head=1,tail=1,tx,ty,r[10001][4];
r[1][1]=i1;r[1][2]=j1;r[1][3]=1;
while(tail<=head){
// cout<<tail<<" "<<head<<endl;
for(int i=1;i<=4;i++){
tx=r[head][1]+fx[i];ty=r[head][2]+fy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&ans[tx][ty]!=f){
tail++;
r[tail][3]=r[tail-1][3]+1;
r[tail][1]=tx;r[tail][2]=ty;
}
}
head++;
}
ans[i1][j1]=r[tail][3];
}
printf("%d\n",ans[i1][j1]+1);
}
return 0;
}