图的深度优先遍历
package sort;
import java.util.Stack;
/**
* Create by ~JH~ on 2018/4/30
*/
public class DFS {
/**
* 深度优先遍历 非递归
* @param relation 邻接矩阵
* @param visited 是否已经访问
* @param stack 栈
*/
public void dfs(int [][] relation, boolean []visited, Stack<Integer> stack){
while (!stack.isEmpty()){
int top=stack.pop();
if (visited[top]==false)
System.out.print(top+" ");
visited[top]=true;
for (int i=0;i<visited.length;i++){
if (visited[i]!=true&&relation[top][i]==1){
stack.push(i);
}
}
}
}
/**
* 图的深度优先遍历 递归
* @param relation
* @param visited
*/
public void dfs_Recursive(int [][] relation, boolean []visited){
for (int i=0;i<visited.length;i++){
if (visited[i]==false){
traverse(i,relation,visited);
}
}
}
private void traverse(int i,int [][]relation,boolean[]visited) {
visited[i]=true;
System.out.print(" "+i);
for (int j=0;j<visited.length;j++){
if (visited[j]==false&&relation[i][j]==1)
traverse(j,relation,visited);
}
}
public static void main(String[] args) {
int [][] re={{0,0,1,0,1},{0,0,1,1,0},{1,1,0,0,0},{0,1,0,0,0},{1,0,0,0,0}};
DFS dfs=new DFS();
boolean[] visited=new boolean[re.length];
Stack<Integer> stack=new Stack<>();
for (int i=0;i<re.length;i++){
if (visited[i]==false){
stack.push(i);
dfs.dfs(re,visited,stack);
}
}
System.out.println();
boolean[] visited1=new boolean[re.length];
dfs.dfs_Recursive(re,visited1);
}
}