/**
* 深度优先遍历
* @param graph
* @param start
*/
public static void DFS(int[][] graph,int start){
BitSet flags = new BitSet(graph.length);
DFSA(graph, start, flags);
}
private static void DFSA(int[][] graph,int cur,BitSet flags){
//设置递归停止条件停止递归
// if(flags.get(cur))
// return;
// flags.set(cur);
// System.out.println(cur);
// for(int i=0;i<graph.length;i++){
// if(graph[cur][i]==1){
// DFSA(graph,i,flags);
// }
// }
//在递归前阻止递归
flags.set(cur);
System.out.println(cur);
for(int i=0;i<graph.length;i++){
if(graph[cur][i]==1 && !flags.get(i)){
DFSA(graph,i,flags);
}
}
}
/**
* 非递归的深度优先遍历,使用stack来模拟递归时堆栈的行为
* @param graph
* @param cur
*/
public static void DFSNR(int[][] graph,int cur){
LinkedList<Integer> stack = new LinkedList<Integer>();
BitSet flags = new BitSet(graph.length);
stack.push(cur);
while(!stack.isEmpty()){
cur = stack.pop();
if(flags.get(cur))
continue;
flags.set(cur);
System.out.println(cur);
for(int i=graph.length-1;i>=0;i--){
if(graph[cur][i]==1){
stack.push(i);
}
}
}
}