90分求助,最后一个点wa
查看原帖
90分求助,最后一个点wa
326713
suyunqiaoKID楼主2021/4/28 22:59
#include<bits/stdc++.h>
using namespace std;
const unsigned int N=2e3;
bool vis[N][N];
int dis[N][N],n,m,sx,sy;
char s;
const int X[]={1,-1,0,0};
const int Y[]={0,0,1,-1};
queue<pair<int,int> >q;
bool tf(int x,int y){
	return x>0&&y>0&&x<=n&&y<=m;
}
void init(){//初始化
	for(register int i=1;i<=n;i++)
	for(register int j=1;j<=m;j++)
	dis[i][j]=-1;
}
void bfs(){
	while(!q.empty()){
		int tx=q.front().first;
		int ty=q.front().second;
		for(register int i=0;i<4;i++){
			int tmp1=tx+X[i];
			int tmp2=ty+Y[i];
			if(tf(tmp1,tmp2)&&!vis[tmp1][tmp2]&&dis[tmp1][tmp2]==-1){
				vis[tmp1][tmp2]=true;
				dis[tmp1][tmp2]=dis[tx][ty]+1;
				q.push(make_pair(tmp1,tmp2));
			}
		}
		q.pop();
		bfs();
	}
}
int main(){
	scanf("%d%d",&n,&m);
	init();
	for(register int i=1;i<=n;i++)	
	for(register int j=1;j<=m;j++){
		cin>>s;
		if(s=='#'){
			vis[i][j]=true;//障碍
			continue;
		}
		if(s=='m'){
			q.push(make_pair(i,j));//起点
			//vis[i][j]=true;
			dis[i][j]=0;
			continue;
		}
		if(s=='d'){
			sx=i;
			sy=j;
		}
	}
	bfs();//广搜
	!vis[sx][sy]?printf("No Way!\n"):printf("%d\n",dis[sx][sy]);
	return 0;	
}
2021/4/28 22:59
加载中...