Chino with Ciste

在这里插入图片描述


简单的洪水填充。不过要注意填充的时候的细节。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=2e3+10;
const int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int n,m,sx,sy,ex,ey,vis[N][N]; char g[N][N];
void bfs(){
	queue<pair<int,int> > q; q.push({sx,sy}); memset(vis,-1,sizeof vis); vis[sx][sy]=0;
	while(q.size()){
		int x=q.front().first,y=q.front().second;	q.pop();
		for(int i=0;i<4;i++){
			int tx=x+dx[i],ty=y+dy[i];
			while(tx>=1&&tx<=n&&ty>=1&&ty<=m&&g[tx][ty]!='*'){
				if(vis[tx][ty]==-1)	vis[tx][ty]=vis[x][y]+1,q.push({tx,ty});
				if(tx==ex&&ty==ey)	return ;
				tx+=dx[i],ty+=dy[i];
			}				
		}
	}
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)	scanf("%s",g[i]+1);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			if(g[i][j]=='S')	sx=i,sy=j;
			if(g[i][j]=='T')	ex=i,ey=j;
		}
	bfs();
	if(vis[ex][ey]==-1)	puts("troil");
	else	cout<<vis[ex][ey]-1;
	return 0;
}
发布了416 篇原创文章 · 获赞 228 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43826249/article/details/103925766