所谓深度优先算法,百科的答案就是这样一种深度优先搜索算法(Depth-First-Search),简称DFS,是一种搜索算法。就是沿着树的深度遍历树的节点,尽可能深入地搜索树的分支。探索完节点v的所有边后,搜索将回溯到找到节点v的边的起始节点。这个过程一直持续到找到所有从源节点可达的节点。如果还有未发现的节点,则选择其中一个作为源节点,重复上述过程,重复整个过程,直到访问完所有节点。属于盲目搜索。通俗地说,遍历树的所有结点分支,遍历过的结点不会再被访问,就足够“深”了。很适合做网络爬虫,你懂的^^还有迷宫问题也是数据结构中的经典问题。首先我们用矩阵创建一个迷宫;常量arr=[[0,0,0,1,0],[0,1,1,1,0],[0,1,0,0,0],[0,0,0,1,0],[0,1,1,1,0]];数字1代表墙,数字0代表路,左上角代表入口,右下角代表出口。这里我们不考虑“死胡同”的情况constarr=[[0,0,0,1,0],[0,1,1,1,0],[0,1,0,0,0],[0,0,0,1,0],[0,1,1,1,0]];//创建迷宫constpathX=[1,-1,0,0];//创建数组代表上,下,左,右,提前这个函数会用到constpathY=[0,0,-1,1];//同上,不同的是矩阵的行和列let_arrLength=arr.length-1;let_arrElementLength=arr[0].length-1;leti=0,j=0;(function(){console.time("time")//用于测试运行时间arr[0][0]=3;//数字3代表走过的路,一开始进入函数matrix(i,j){letk,newi,newj;for(k=0;k<4;k++){//上下左右共四个方向if(advance(i,j,k)){/*通过advance函数的判断返回可行走路径的点*/newi=i+pathX[k];newj=j+pathY[k];arr[newi][newj]=3;//设置这个点定义为已经经过的点/*判断此时是否到达终点,如果没有则递归*/if(newi==_arrLength&&newj==_arrElementLength){end()}else{matrix(newi,newj);}}}arr[i][j]=2}matrix(0,0)函数advance(i,j,k){varbool=true;/*每走一步,判断是否还有路要走*/i+=pathX[k];j+=路径Y[k];/*判断临界范围,确保在迷宫范围内*/if(i<0||i>_arrLength||j<0||j>_arrElementLength){bool=false;}elseif(arr[i][j]!=0){bool=false;返回布尔值;}/*负责输出结果*/functionend(){leti,j,newArr=[];for(i=0;i<_arrLength+1;i++){for(j=0;j<_arrLength+1;j++){if(arr[i][j]==3){newArr.push(“V”);}else{newArr.push("*");}}}/*下面的代码只是为了在控制台看的更直观,没有必要,因为有点笨拙*/newArr.splice(0,0,"")newArr.splice(6,0,"\n");newArr.splice(12,0,"\n");newArr.splice(18,0,"\n");newArr.splice(24,0,"\n");console.log(newArr.join(""));}console.timeEnd("time")})()最终路线图如下
