zh强 2019-04-19 07:49 采纳率: 0%
浏览 626

BFS走迷宫传送门超时怎么改进啊?

第一次提问哈- -,想知道1000ms不超时的解决方法,比较笨
告诉我下思路或f'xiang就可以了

#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;

char m[100][100];
int r,c;
int sc,sr;
int ec,er;
int d[4][2]= {{-1,0},{0,1},{1,0},{0,-1}};
typedef struct
{
    int c;
    int r;
    int step;
} LOC;
struct
{
    int sc;
    int sr;
    int ec;
    int er;
} P[100];

int main()
{
    freopen("data.txt","r",stdin);
    int T;
    cin>>T;
    while(T--)
    {
        cin>>c>>r;
        getchar();
        for(int i=0; i<c; i++)
            gets(m[i]);
        int W;
        cin>>W;
        for(int i=0; i<W; i++)
        {
            cin>>P[i].sc>>P[i].sr>>P[i].ec>>P[i].er;
        }
        cin>>sc>>sr;
        cin>>ec>>er;
        queue<LOC> qu;
        LOC cur;
        cur.c=sc;
        cur.r=sr;
        cur.step=0;
        qu.push(cur);
        int flag;
here:
        while(!qu.empty())
        {
            flag=0;
            cur=qu.front();
            qu.pop();
            if((cur.c==ec)&&(cur.r==er))
            {
                cout<<cur.step<<endl;
                flag=1;
                break;
            }
            for(int i=0; i<W; i++)
            {
                if(P[i].sc == cur.c && P[i].sr == cur.r)
                {
                    if(m[P[i].ec][P[i].er]=='0')
                    {
                        LOC New;
                        New.c=P[i].ec;
                        New.r=P[i].er;
                        New.step=cur.step+1;
                        m[New.c][New.r]='1';
                        qu.push(New);
                    }
                    goto here;
                }
            }
            for(int i=0; i<4; i++)
            {
                LOC New;
                New.c=cur.c+d[i][0];
                New.r=cur.r+d[i][1];
                if(New.c<0||New.c>c-1||New.r<0||New.r>r-1||m[New.c][New.r]=='1')
                    continue;
                New.step=cur.step+1;
                m[New.c][New.r]='1';
                qu.push(New);
            }
        }
        if(!flag)
        cout<<"die"<<endl;
    }
    return 0;
}


  • 写回答

1条回答

  • aalbertini 2019-04-19 18:38
    关注

    用DFS走迷宫。 BFS不适合走迷宫。

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器