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
    关注

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

    评论

报告相同问题?

悬赏问题

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