为什么把数组初始化为-1就能过,特判-1却过不了?
特判-1情况 90,WA#10
#include<iostream>
#define ll long long
using namespace std;
const ll MAXN=1e7;
int front,rear,n,m,ans,q,p,a[5000][5000],s[5000][5000];
bool f[1000][1000];
int dx[9]={0,1,2,-1,-2,-1,2,-2,1};
int dy[9]={0,2,1,-2,-1,2,-1,1,-2};
struct node{
int x,y;
}queue[MAXN];
void bfs(){
queue[1].x=q;
queue[1].y=p;
s[queue[1].x][queue[1].y]=0;
front=1;
rear=1;
f[q][p]=1;
while(front<=rear){
for(int i=1;i<=8;++i){
int t1=queue[front].x+dx[i];
int t2=queue[front].y+dy[i];
if(t1<1||t1>n||t2<1||t2>m)continue;
if(!f[t1][t2]){
queue[++rear].x=t1;
queue[rear].y=t2;
s[t1][t2]=s[queue[front].x][queue[front].y]+1;
f[t1][t2]=1;
}
}
++front;
}
}
int main(){
cin>>n>>m>>q>>p;
bfs();
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
if(s[i][j]==0&&i!=q&&j!=p)
s[i][j]=-1;
cout<<s[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
初始化-1 AC
#include<iostream>
#define ll long long
using namespace std;
const ll MAXN=1e7;
int front,rear,n,m,ans,q,p,a[5000][5000],s[5000][5000];
bool f[1000][1000];
int dx[9]={0,1,2,-1,-2,-1,2,-2,1};
int dy[9]={0,2,1,-2,-1,2,-1,1,-2};
struct node{
int x,y;
}queue[MAXN];
void bfs(){
queue[1].x=q;
queue[1].y=p;
s[queue[1].x][queue[1].y]=0;
front=1;
rear=1;
f[q][p]=1;
while(front<=rear){
for(int i=1;i<=8;++i){
int t1=queue[front].x+dx[i];
int t2=queue[front].y+dy[i];
if(t1<1||t1>n||t2<1||t2>m)continue;
if(!f[t1][t2]){
queue[++rear].x=t1;
queue[rear].y=t2;
s[t1][t2]=s[queue[front].x][queue[front].y]+1;
f[t1][t2]=1;
}
}
++front;
}
}
int main(){
cin>>n>>m>>q>>p;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
s[i][j]=-1;
}
}
bfs();
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cout<<s[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
求解答