无法使用传送门求助
查看原帖
无法使用传送门求助
1495466
LINYUHENG2楼主2025/7/20 16:52
#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[305][305];
struct loc{
	int x,y,step;
}st,ed,now,nt;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
queue<loc> q;
void bfs(){
	q.push(st);
	while(!q.empty()){
		now=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			nt.x=now.x+dx[i];
			nt.y=now.y+dy[i];
			nt.step=now.step+1;
			if(nt.x<1||nt.x>n) continue;
			if(nt.y<1||nt.y>m) continue;
			if(a[nt.x][nt.y]=='#') continue;
			if(a[nt.x][nt.y]>='A'&&a[nt.x][nt.y]<='Z'){
				for(int i=1;i<=n;i++){
					for(int j=1;j<=m;j++){
						if(i==nt.x&&j==nt.y) continue;
						if(a[i][j]==a[nt.x][nt.y]){
							nt.x=i,nt.y=j;
							break;
						}
					}
				}
			}
			if(nt.x==ed.x&&nt.y==ed.y){
				printf("%d",nt.step);
				return;
			}
			a[nt.x][nt.y]='#';
			q.push(nt);
		}
	}
}

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			scanf("%c",&a[i][j]); 
			if(a[i][j]=='@') st.x=i,st.y=j,a[i][j]='#';
			if(a[i][j]=='=') ed.x=i,ed.y=j,a[i][j]='.';
		}
		getchar();
	}
	st.step=0;
	bfs();
	return 0;
}
2025/7/20 16:52
加载中...