求大佬指点迷津
查看原帖
求大佬指点迷津
800751
acmwriter楼主2023/6/13 23:22
#include<bits/stdc++.h>
using namespace std;
int n,m,fx,fy;
char a[305][305];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int ax[26],ay[26],bx[26],by[26];
struct node{
	int x,y;
	int ans;
};
int main(){
	queue<node>p;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			if(a[i][j]=='@'){
				fx=i;
				fy=j;
			}
			if(a[i][j]>='A'&&a[i][j]<='Z'){
				if(ax[a[i][j]-'A']==0&&ay[a[i][j]-'A']==0)
				ax[a[i][j]-'A']=i,ay[a[i][j]-'A']=j;
				else bx[a[i][j]-'A']=i,by[a[i][j]-'A']=j;
			}
		}
	}
	node F={fx,fy,0};
	p.push(F);
	while(!p.empty()){
		node N=p.front();
		p.pop();
		for(int i=0;i<4;i++){
			int sx=N.x+dx[i];
			int sy=N.y+dy[i];
			if(a[sx][sy]=='='){
				N.ans++;
				cout<<N.ans;
				break;
			}
			else if(a[sx][sy]=='.'){
				N.ans++;
				node E={sx,sy,N.ans};
				p.push(E);
				a[sx][sy]='#';
			}
			else if(a[sx][sy]>='A'&&a[sx][sy]<='Z'){
				N.ans++;
				if(ax[a[sx][sy]-'A']==sx&&ay[a[sx][sy]-'A']==sy){
					node E={bx[a[sx][sy]-'A'],by[a[sx][sy]-'A'],N.ans};
					p.push(E);
					a[sx][sy]='#';
				}
				else if(bx[a[sx][sy]-'A']==sx&&by[a[sx][sy]-'A']==sy){
					node E={ax[a[sx][sy]-'A'],ay[a[sx][sy]-'A'],N.ans};
					p.push(E);
					a[sx][sy]='#';
				}
			}
		}
	}
	return 0;
}
2023/6/13 23:22
加载中...