#include #include #include using namespace std; int n,m,x1,y1,x2,y2; bool jud[26],mark[305][305]; char map[305][305]; int rx[4]={0,0,-1,1}; int ry[4]={1,-1,0,0}; struct zz{ int xx,yy; }zs[26][2]; struct node{ int x,y,t; }; queuea; void bfs(){ node S; S.x=x1; S.y=y1; S.t=0; a.push(S); while(!a.empty()){ node now=a.front(); a.pop(); if(now.xx2&&now.yy2){ cout<<now.t; break; } if(mark[now.x][now.y])continue; mark[now.x][now.y]=1; for(int i=0;i<4;i++){ int to_x=now.x+rx[i]; int to_y=now.y+ry[i];

if(to_x<1||to_x>n||to_y<1||to_y>m)continue;
		if(map[to_x][to_y]=='#')continue;
		if(map[to_x][to_y]>='A'&&map[to_x][to_y]<='Z'){
			char Now=map[to_x][to_y]-'A';
			if(to_x==zs[Now][0].xx&&to_y==zs[Now][0].yy){
				to_x=zs[Now][1].xx;
				to_y=zs[Now][1].yy;
			}
			else{
				to_x=zs[Now][0].xx;
				to_y=zs[Now][0].yy; 
			}
		}
		node New;
		New.x=to_x;
		New.y=to_y;
		New.t=now.t+1;
		a.push(New);
	}
}

} int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>map[i][j]; if(map[i][j]'@')x1=i,y1=j; if(map[i][j]'=')x2=i,y2=j; if(map[i][j]!='@'&&map[i][j]!='='&&map[i][j]!='.'&&map[i][j]!='#'){ int now=map[i][j]-'A'; if(!jud[now]){ zs[now][0].xx=i; zs[now][0].yy=j; jud[now]=1; } else{ zs[now][1].xx=i; zs[now][1].yy=j; } } } } bfs(); return 0; }

1 条评论

  • @ 2024-5-27 14:09:13

    是的分隔符吧你 ,杠一九年 二uej 让她以后基本二的涂鸦特我 已经

    • 1

    信息

    ID
    757
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    23
    已通过
    6
    上传者