提交时间:2023-04-06 21:47:53
运行 ID: 13864
#include<bits/stdc++.h> using namespace std; struct Node{ int x,y,step; }qf,qx; const int MN=102; char a[MN][MN]; int n,m,n1,m1,n2,m2; int dx[4]={1,0,0,-1}; int dy[4]={0,1,-1,0}; queue<Node> qe; void bfs(int sx,int sy){ qf.x=sx,qf.y=sy,qf.step=0; qe.push(qf); while(qe.size()){ qf=qe.front(); qe.pop(); for(int i=0;i<4;++i){ int tx=qf.x+dx[i]; int ty=qf.y+dy[i]; if(a[tx][ty]==0){ qx.x=tx;qx.y=ty; qx.step=qf.step+1; a[tx][ty]='*'; qe.push(qx); } else if(a[tx][ty]=='D'){ if(tx==n1 && ty==m1){ qx.x=n2,qx.y=m2; } else{ qx.x=n1,qx.y=m1; } a[qx.x][qx.y]='*'; qx.step=qf.step+1; qe.push(qx); } else if(a[tx][ty]=='2'){ cout<<qf.step+1<<endl; exit(0); } } } } int main( ) { cin>>n>>m; cin>>n1>>m1>>n2>>m2; //设置围栏 for(int j=0;j<=m+1;++j) a[0][j]=a[n+1][j]='*'; for(int i=1;i<=n;++i) a[i][0]=a[i][m+1]='*'; a[1][1]='1',a[n][m]='2'; a[n1][m1]=a[n2][m2]='D'; bfs(1,1); return 0; }