图的DFS

来源:互联网 发布:ubuntu 中文界面 编辑:程序博客网 时间:2024/05/22 16:07

 每个节点访问一次,每条边访问一次,时间复杂度O(V+E)


public class DFS {public static int timer = 0;public static void dfs(Graph g, Vertex v){assert(true);if(v.color != Vertex.WHITE){return;}System.out.print(v.id + " ");v.color = Vertex.GRAY;v.start_time = timer++;for(int i=0; i<g.count_vertex; i++){if(g.adjMatrix[v.id][i] > 0){g.vertexs[i].parent = v;dfs(g, g.vertexs[i]);}}v.color = Vertex.BLACK;v.end_time = timer++;}/** * @param args */public static void main(String[] args) {//如果是无向连通图,一次遍历可以读完,只有一棵树Graph g = Graph.createNoDirectedGraph(8, "dfs.txt");g.printGraph();DFS.timer = 0;DFS.dfs(g, g.vertexs[5]);System.out.println();for(int i=0; i<g.count_vertex; i++){System.out.print(g.vertexs[i].start_time + " " + g.vertexs[i].end_time + " : ");}System.out.println();for(int i=0; i<g.count_vertex; i++){System.out.print(g.vertexs[i].parent.id + " ");}System.out.println();//如果有向连通图,一次读不完,多次读,形成森林//Graph g = Graph.createDirectedGraph(8, "dfs.txt");//g.printGraph();//for(int i=0; i<g.count_vertex; i++){//if(g.vertexs[i].color == Vertex.WHITE){//DFS.dfs(g, g.vertexs[i]);//}//}}}