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不适合走迷宫。

    评论

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决