深度优先遍历

来源:互联网 发布:软件测试v模型 编辑:程序博客网 时间:2024/05/16 23:41
/** * 深度优先遍历 * @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);}}}}

0 0
原创粉丝点击