图的遍历,可以从图中的任何一个节点出发,将图的各个节点都经过一次,且只有一次。
eg1:
深度优先遍历选择一个节点的相邻节点,直至最末的节点没有相邻的节点,就返回上一层,在遍历上一个节点的另一个相邻节点,以此方式直至遍历结束。
深度优先遍历的图解顺序:
eg2:
深度优先遍历的图解顺序:
上代码:
class tu{
constructor(){
this.point_array = new Array();
this.point_arc = new Array();
}
create(){
//图的顶点元素
this.point_array = ['A', 'B', 'C', 'E', 'D', 'G', 'F'];
//邻接矩阵
this.point_arc = [[0,1,1,1,0,0,0],
[1,0,0,0,0,0,0],
[1,0,0,0,0,0,0],
[1,0,0,0,1,0,1],
[0,0,0,1,0,0,0],
[0,0,0,0,0,0,1],
[0,0,0,1,0,1,0]]
}
show(){
console.log(this.point_array);
console.log(this.point_arc);
};
dfs(){
let visited = new Array();
for(let i = 0; i < this.point_array.length; i++){
visited[i] = false;
}
this.iterator(visited,0)
}
iterator(visit,n){
if(!visit[n]){
console.log(n+':'+this.point_array[n])
visit[n] = true;
for(let j = 0; j < this.point_array.length; j++){
if(!visit[j] && this.point_arc[n][j]===1){
this.iterator(visit,j);
}
}
}
}
};
let pic = new tu();
pic.create();
pic.dfs();