社区讨论

求调

P1189[COI 2001] SEARCH参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mm1uwfvf
此快照首次捕获于
2026/02/25 17:53
上周
此快照最后确认于
2026/02/26 23:55
上周
查看原帖
CPP
#include<iostream>
#include<queue>
using namespace std;
struct Node
{
    int X,Y,S;
}F;
int R,C,Dx[5]{0,1,-1,0,0},Dy[5]{0,0,0,1,-1},Q,W[1001];
char Map[51][51];
queue<Node>Qu;
void BFS(Node F);
int main()
{
    scanf("%d%d",&R,&C);
    for(int I=1;I<=R;I++)
    {
        scanf("%s",Map[I]+1);
        for(int J=1;J<=C;J++)
        {
            if(Map[I][J]=='*')
            {
                F.X=I;F.Y=J;F.S=1;
            }
        }
    }
    scanf("%d",&Q);
    int Cnt=1,T=Q;
    while(T--)
    {
        char Cw[10];
        scanf("%s",Cw+1);
        switch(Cw[1])
        {
            case'N':W[Cnt]=2;break;
            case'S':W[Cnt]=1;break;
            case'W':W[Cnt]=4;break;
            case'E':W[Cnt]=3;break;
        }
        Cnt++;
    }
    BFS(F);
    for(int I=1;I<=R;I++)
    {
        printf("%s\n",Map[I]+1);
    }
}
void BFS(Node F)
{
    Map[F.X][F.Y]='.';
    Qu.push(F);
    while(!Qu.empty())
    {
        int Cw=Qu.front().S,NX=Qu.front().X,NY=Qu.front().Y,Dir=W[Cw];
        if(Qu.front().S==Q)
        {
            Map[NX][NY]='*';
            Qu.pop();
        }
        else
        {
            Qu.pop();
            while((NX+Dx[Dir]>=1&&NX+Dx[Dir]<=R)&&(NY+Dy[Dir]>=1&&NY+Dy[Dir]<=C)&&Map[NX+Dx[Dir]][NY+Dy[Dir]]=='.')
            {
                NX+=Dx[Dir];NY+=Dy[Dir];
                printf("[D]X:%d Y:%d\n",NX,NY);
                Qu.push({NX,NY,Cw+1});
            }
        }
    }
}

回复

1 条回复,欢迎继续交流。

正在加载回复...