社区讨论
求调
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 条回复,欢迎继续交流。
正在加载回复...