站外题求助
这是一道BFS题
当前思路,BFS扫两遍,后来的覆盖
复制到洛谷上的题面
小视野上的题面
当前的代码
#include<bits/stdc++.h>
using namespace std;
int x,y,k,ha,la,hb,lb;
int xx[]={0,0,1,-1},yy[] = {-1,1,0,0};
char a[1000][1000];
struct Node
{
int x,y,step;
};
int main()
{
cin>>x>>y>>k;
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
cin>>a[i][j];
if(a[i][j]=='A')ha=i,la=j;
if(a[i][j]=='M')hb=i,lb=j;
}
}
queue<Node>A;
queue<Node>B;
A.push(Node{ha,la,0});
B.push(Node{hb,lb,0});
a[ha][la]='A';
a[hb][lb]='M';
if(k==0)
{
for(int i=0;i<x;i++)cout<<a[i]<<endl;
return 0;
}
while(!B.empty()&&B.front().step<k)
{
Node bnext=B.front();
B.pop();
for(int i=0;i<4;i++)
{
int nx=bnext.x+xx[i],ny=bnext.y+yy[i];
if(nx>=0&&ny>=0&&nx<x&&ny<y&&a[nx][ny]=='.')
{
a[nx][ny]='m';
B.push(Node{nx,ny,bnext.step+1});
}
}
}
while(!A.empty()&&A.front().step<k)
{
Node anext=A.front();
A.pop();
for(int i=0;i<4;i++)
{
int nx=anext.x+xx[i],ny=anext.y+yy[i];
if(nx>=0&&ny>=0&&nx<x&&ny<y&&(a[nx][ny]=='.'||a[nx][ny]=='m'))
{
a[nx][ny]='a';
A.push(Node{nx,ny,anext.step+1});
}
}
}
for(int i=0;i<x;i++)cout<<a[i]<<endl;
return 0;
}