求助P1825
  • 板块灌水区
  • 楼主GG_wen
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/27 21:52
  • 上次更新2024/12/28 11:02:54
查看原帖
求助P1825
1200079
GG_wen楼主2024/12/27 21:52
#include<iostream>
#include<queue>
using namespace std;
long long n,m,sx,sy,dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}},s[305][305];
char a[305][305];
struct point{
	long long x,y,sum;
};
void zimu1(long long &xx,long long &yy){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]==a[xx][yy]&&i!=xx&&j!=yy){
				xx=i;
				yy=j;
				return ;
			}
		}
	}
}
queue<point> v;
int main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j];
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j]=='@') sx=i,sy=j;
	//cout<<sx<<" "<<sy<<endl; 
	a[sx][sy]=0;
	point k={sx,sy,0};
	v.push(k);
	while(!v.empty()){
		point p=v.front();
		long long x1=p.x,y1=p.y,t=p.sum;
		v.pop();
		if('A'<=a[x1][y1]&&a[x1][y1]<='Z') zimu1(x1,y1);
		if(a[x1][y1]=='='){
			cout<<t;
			return 0;
		}
		for(int i=0;i<4;i++){
			long long xx=x1+dir[i][0],yy=y1+dir[i][1];
			if(xx>=1&&yy>=1&&xx<=n&&yy<=m&&a[xx][yy]!='#'&&s[xx][yy]==0){
				s[xx][yy]=1;
				//cout<<xx<<" "<<yy<<endl;
				point k={xx,yy,t+1};
				v.push(k);
			}
		}
	}
	return 0;
}

53求调

2024/12/27 21:52
加载中...