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);
深度优先搜索,迷宫问题,边长大于7*7就运行不出来。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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 电脑桌面设定一个区域禁止鼠标操作