ChenyiMX 2018-11-08 03:01 采纳率: 0%
浏览 422

深度优先搜索,迷宫问题,边长大于7*7就运行不出来。

    var m = 7,n = 7, endx = 7,endy = 7,min=9999999;
    var a = [],book = [];
    //初始化迷宫 和走动记录图
    for(var i = 1;i<=m;i++){
        var now = [];
        for(var j=1;j<=n;j++){
            now[j] = 0;
        }
        a[i] = now;
    }
    a[1][3] = 1;
    a[3][3] = 1;
    a[4][2] = 1;
    a[5][4] = 1;
    a[6][1] = 1;
    a[6][2] = 1;
    a[6][3] = 4;
    a[6][4] = 3;
    for(var i = 1;i<=m;i++){
        var now = [];
        for(var j=1;j<=n;j++){
            now[j] = 0;
        }
        book[i] = now;
    }
    console.log(a);
    //初始化行走数组
    var next = [[0,1],[1,0],[0,-1],[-1,0]];//右 下 左 上
    //给迷宫的长宽高赋值
    function fuzhi(){
         m = $('chang').value;
         n = $('kuang').value;
         endx = $('heng').value;
         endy = $('zong').value;
    }
    function $(id){
        return document.getElementById(id);
    }

    //现在所在的x坐标,y坐标  以及步数
    function dfs(stax,stay,step){
        //下一步位置所在坐标tx,ty  和下一步可以到达的方向
        var tx,ty,k;
        //判断是否达到目标的位子
        if(stax==endx&&stay==endy){
            //更新最小值
            if(step<min){
                min = step;
            }
            //请注意这里返回很重要
            return ;
        }
        //枚举4种走法
        for(k = 0;k<=3;k++){
            //计算下一个点的坐标
            tx = stax +next[k][0];
            ty = stay +next[k][1];
        //判断是否越界
            if(tx<1||tx>n||ty<1||ty>m){
                continue;
            }
            //判断该点是否是障碍物或者已经在路经中
            if(a[tx][ty]==0&&book[tx][ty]==0){
                book[tx][ty]=1;//标记这个点已经走过
                dfs(tx,ty,step+1);//开始尝试下一个点
                book[tx][ty]=0;//尝试结束,取消这个点的标记
            }
        }
        return ;
    }
    book[1][1] = 1;
    dfs(1,1,0);
    console.log(min);

  • 写回答

2条回答 默认 最新

  • threenewbee 2018-11-08 04:37
    关注

    代码都写在一起连换行都没有,怎么看.你说运行不起来,那么要么是运行时间过长,要么是递归深度太大。建议你找一个现成的程序先学习下。

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?