奇怪
查看原帖
奇怪
908638
chair0114楼主2023/7/18 17:10

为什么把数组初始化为-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;
} 

求解答

2023/7/18 17:10
加载中...