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

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

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

《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;
	}
	
}

代码运行结果如下:

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

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/kangyucheng/article/details/76012920
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞