您的位置:首页 > 其它

回溯法-bfs--迷宫问题的最短路径

2017-08-27 11:48 246 查看
迷宫问题怎样才可以得到最短路径:


这里有测试案例:

0-通路,-1为墙,输入为:


测试经过计算机跑过--为:


这样其最短路径为:


核心算法为:

findpath(int ** map,constint &start_x,constint
&start_y)

{

    int m=start_x,n=start_y;

    Queue Q;

    iniqueue(&Q);

    map[m]
=1;

   
//表示已经走过了;

    node *p=(node *)malloc(sizeof(node));

    p->x=m;

    p->y=n;

    p->steps=0;

    Enqueue(&Q, p);

    node *s=(node*)malloc(sizeof(node));

    node *temp=(node*)malloc(sizeof(node));

    while(Q.size!=0)

    {

        Dequeue(&Q,s);

        if(s->x==N-1&&s->y==M-1)

            break;

        

        for(int k=0;k<4;k++)

        {

            temp->x=s->x+x[k];

            temp->y=s->y+y[k];

//方向选择,如果符合通路,入队

            if(check(temp->x, temp->y)==0&&map[temp->x][temp->y]==0)

                {

//check函数防止其中边界,不出边界返回为0

                    temp->steps=s->steps+1;

                    map[temp->x][temp->y]=temp->steps;

                    Enqueue(&Q, temp);

                }

        }

    }
}
大家在思考一下怎样打印最短路径,当然是利用回溯法,这样也会非常简单,就会知道,要打印它,就只需要知道它的前驱节点,这样打印不会出错。打印其实可以参考我的前面的回溯迷宫问题的核心算法,这里的steps其实就是一个index,很好解决问题。
希望各位前辈多多指教。
加上一个测试完整案例:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: