社区讨论
ABC D求调
学术版参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m5j1ysii
- 此快照首次捕获于
- 2025/01/05 11:28 去年
- 此快照最后确认于
- 2025/11/04 11:57 4 个月前
wa 29
ac 37
CPP#include<iostream>
#include<climits>
#include<queue>
using namespace std;
struct node
{
int x,y,dir,s;
}tmp;
queue<node>q;
bool b[1010][1010];
int main()
{
char c;
int n,m,i,j,sx,sy,ex,ey,x = 0,y = 0,sum=0,ans=INT_MAX;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cin>>c;
if(c=='S')
{
sx=i;
sy=j;
}
if(c=='G')
{
ex=i;
ey=j;
}
if(c=='#')
b[i][j]=1;
}
q.push({sx,sy,0,0});
b[sx][sy]=1;
while(!q.empty())
{
tmp=q.front();
q.pop();
if(tmp.x==ex&&tmp.y==ey)
{
sum++;
ans=min(ans,tmp.s);
if(sum>1) cout<<ans;
return 0;
}
for(i=1;i<=4;i++)
if(i!=tmp.dir)
{
switch(i)
{
case 1:
x=tmp.x+1;
y=tmp.y;
break;
case 2:
x=tmp.x-1;
y=tmp.y;
break;
case 3:
x=tmp.x;
y=tmp.y+1;
break;
case 4:
x=tmp.x;
y=tmp.y-1;
break;
}
if(x>0&&x<=n&&y>0&&y<=m&&!b[x][y])
{
b[x][y]=1;
q.push({x,y,i,tmp.s+1});
}
}
}
cout<<-1;
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...