java语言实现图的深度优先遍历

来源:互联网 发布:淘宝有快排吹 编辑:程序博客网 时间:2024/05/23 01:23

java语言实现图的深度优先遍历:

图的存储采用的是邻接矩阵存储的方式,对下面的无向图进行遍历

代码如下:

public class Deep {int count=0;public static void main(String args[]){Graph g=new Graph(8);g.PrintGraph();Deep deep=new Deep();deep.DFS_each(g, 8);System.out.println();System.out.println("连通分支数为:"+deep.count);}public void DFS_each(Graph g,int i){System.out.println("深度优先遍历顺序为:");for(int c=0;c<i;c++){if(g.nodelist[c].visited==false){DFS(g,c);count++;}}}public void DFS(Graph g,int i){System.out.print(g.nodelist[i].ch+"  ");g.nodelist[i].setVisited(true);for(int j = 0;j<g.vexnum;j++){if((g.graph[i][j] == 1)&&(g.nodelist[j].isVisited()==false)){DFS(g,j);} }}}class Graph {public int[][] graph;public int vexnum;public Node[] nodelist;public Graph(int vexnum){//构造图this.vexnum=vexnum;graph=new int[vexnum][vexnum];addGraph(0, 1);addGraph(4, 1);addGraph(3, 1);addGraph(4, 5);addGraph(5, 6);addGraph(4, 0);addGraph(7, 2);nodelist=new Node[vexnum];String str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";for(int size=0;size<vexnum;size++){nodelist[size]=new Node(str.charAt(size),false);}}public void addGraph(int x,int y){//添加边if (x==y||x>vexnum||y>vexnum){return;}else{graph[x][y]=1;graph[y][x]=1;}}public void PrintGraph(){//打印图String c="ABCDEFGHIJKLMNOPQRSTUVWXYZ";System.out.print("    ");for(int j=0;j<vexnum;j++){System.out.print(c.charAt(j)+"  ");}System.out.println();for (int i=0;i<vexnum;i++){System.out.print(c.charAt(i)+" ");for(int j=0;j<vexnum;j++){System.out.printf("%3d",graph[i][j]);}System.out.println();}}public void PrintNode(){//打印节点for(int i=0;i<vexnum;i++){if (nodelist[i].visited==true){System.out.println(nodelist[i].ch);}}}}class Node{char ch;boolean visited;public Node(char ch,boolean visited){this.ch=ch;this.visited=visited;}public char getCh() {return ch;}public void setCh(char ch) {this.ch = ch;}public boolean isVisited() {return visited;}public void setVisited(boolean visited) {this.visited = visited;}}

代码运行结果如下:


阅读全文
0 0