站外题求助
  • 板块学术版
  • 楼主2023nsty04
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/14 21:28
  • 上次更新2024/10/14 23:35:41
查看原帖
站外题求助
1121929
2023nsty04楼主2024/10/14 21:28

站外题求助

这是一道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;
 } 
2024/10/14 21:28
加载中...