一只姓梁的monkey 2022-12-31 14:11 采纳率: 53.8%
浏览 15
已结题

C++ BFS Dungeon Master

原题在这

代码


#include<iostream>
#include<cstdio>
using namespace std;
int map[501][501][501],T=1,W,X,Y,Z;
int F[6][3]={{0,0,1},{0,0,-1},{0,-1,0},{0,1,0},{1,0,0},{-1,0,0}};
struct node{
    int x,y,z,l;
}Q[1000001],S,E;
char c;
int BFS()
{
    W++;
    Q[W]=S;
    while(T<=W)
    {
        S=Q[T];
        T++;
        S.l++;
        for(int i=0;i<6;i++)
        {
            S.x+=F[i][0];
            S.y+=F[i][1];
            S.z+=F[i][2];
            if(S.x==E.x && S.y==E.y && S.z==E.z)
            {
                return S.l;
            }
            if(S.x>=0 && S.x<X && S.y>=0 && S.y<Y && S.z>=0 && S.z<Z && map[S.x][S.y][S.z]==0)
            {
                map[S.x][S.y][S.z]=1;
                W++;
                Q[W]=S;
            }
            S.x-=F[i][0];
            S.y-=F[i][1];
            S.z-=F[i][2];
        }
    }
    return -1;
}
int main()
{
    
    while(true)
    {
        cin>>X>>Y>>Z;
        if(X==0)
        {
            break;
        }
        for(int i=0;i<X;i++)
        {
            for(int j=0;j<Y;j++)
            {
                for(int k=0;k<Z;k++)
                {
                    cin>>c;
                    if(c!='#')
                    {
                        map[i][j][k]=0;
                    }
                    else
                    {
                        map[i][j][k]=1;
                    }
                    if(c=='S')
                    {
                        S.x=i;
                        S.y=j;
                        S.z=k;
                    }
                    if(c=='E')
                    {
                        E.x=i;
                        E.y=j;
                        E.z=k;
                    }
                }
            }
        }
        int num=BFS();
        if(num==-1) cout<<"Trapped!"<<endl;
        else cout<<"Escaped in "<<num<<" minute(s)."<<endl;
    }
}

##错误原因

除 一号 and 三号 测试点 外均未通过

  • 写回答

2条回答 默认 最新

  • xxxhugo5 2022-12-31 17:19
    关注

    根据您提供的代码和错误信息,我猜测可能是因为没有正确处理边界条件导致的。在进行 BFS 时,需要注意判断越界的情况,并在边界外提前停止搜索。

    另外,这道题也需要注意初始化的问题。您在第一个 while 循环中已经将 T 和 W 的值都赋值为 1 了,但在下一个 while 循环中,T 又被赋值为 1。这可能会导致无法正常进入循环,从而导致程序无法正常执行。建议您在第二个 while 循环中将 T 的值赋为 1 后再进行判断。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月31日
  • 已采纳回答 12月31日
  • 创建了问题 12月31日

悬赏问题

  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥15 C#字典调用时报错,有关文件加载
  • ¥100 在连接内网VPN时,如何同时保持互联网连接
  • ¥15 MATLAB中使用parfor,矩阵Removal的有效索引在parfor循环中受限制
  • ¥20 Win 10 LTSC 1809版本如何无损提升到20H1版本
  • ¥50 win10 LTSC 虚拟键盘不弹出
  • ¥30 关于PHP中POST获取数据的问题
  • ¥30 微信小程序请求失败,网页能正常带锁访问
  • ¥15 Python实现hog特征图可视化
  • ¥30 德飞莱51单片机实现C4炸弹