救救救救救(悬赏关注)
查看原帖
救救救救救(悬赏关注)
1069781
Lzj_qwq楼主2024/5/15 22:38
#include<cstdio>
#include<queue>
using std::queue;
const int walk[4][2]{
	{0,1},{1,0},{0,-1},{-1,0}
};
struct coord{
	int x,y,step;
};
queue<coord> q;
int main(){
	int n,m;
	scanf("%d%d",&n,&m);
	char v[301][301];
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j){
			scanf("%c",&v[i][j]);
			if(v[i][j]=='@')
				q.push((coord){i,j,0});
		}
	coord u=q.front();q.pop();
	while(v[u.x][u.y]!='='){
		for(int i=0,nx=0,ny=0;i<4;++i){
			nx=u.x+walk[i][0];
			ny=u.y+walk[i][1];
			if(v[nx][ny]>='A'&&v[nx][ny]<='Z'){
				for(int i=1;i<=n;++i)
					for(int j=1;j<=m;++j)
						if(v[nx][ny]==v[i][j]&&nx!=i){
							q.push((coord){i,j,u.step+1});
							v[nx][ny]='#';break;
						}
			}
			if(v[nx][ny]!='#'&&nx>0&&nx<=n&&ny>0&&ny<=m)
				q.push((coord){nx,ny,u.step+1});
		}
		v[u.x][u.y]='#';
		q.front();q.pop();
	}
	printf("%d",u.step);
	return 0;
}
2024/5/15 22:38
加载中...