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关注
代码都写在一起连换行都没有,怎么看.你说运行不起来,那么要么是运行时间过长,要么是递归深度太大。建议你找一个现成的程序先学习下。
解决 无用评论 打赏 举报
悬赏问题
- ¥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?