社区讨论

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 条回复,欢迎继续交流。

正在加载回复...