Java實現圖的深度優先遍歷

深度優先遍歷算法如下:

/*其中matirx爲圖的鄰接矩陣,Vertex爲自定義的頂點類,
start爲指定的起始頂點,list2用來存儲深度優先遍歷的頂點序列*/
static void dfs(int matrix[][],List<Vertex> list,int start,List<Integer> list2){
	int length = matrix.length;
	Vertex node = list.get(start);
	list2.add(node.getIndex());
	node.setVisited(true);
	for(int i = 0;i<length;i++){
		int weight = matrix[start][i];
		if(weight != 0){
			if(list.get(i).isVisited()){
				continue;
			}
			else{
				dfs(matrix,list,i,list2);
			}
		}
		else{
			continue;
		}
	}
}
class Vertex{
	int index;
	boolean  visited;
	Vertex(int index){
		this.index = index;
	}
	int getIndex(){
		return index;
	}
	void setIndex(int index){
		this.index = index;
	}
	boolean isVisited(){
		return visited;
	}
	void setVisited(boolean visited){
		this.visited= visited;
	}
}

主方法(測試用):

public static void main(String args[]){
		int matrix[][]={
		{0,1,1,0,0,0,1},
		{1,0,0,0,0,1,0},
		{1,0,0,1,1,0,0},
		{0,0,1,0,0,0,0},
		{0,0,1,0,0,0,0},
		{0,1,0,0,0,0,0},
		{1,0,0,0,0,0,0}
		};
		List<Vertex>list = new ArrayList<Vertex>();
		for(int i = 0 ;i<matrix.length;i++){
			list.add(new Vertex(i));
		}
		List<Integer>list2 = new ArrayList<Integer>();
		dfs(matrix,list,0,list2);
		System.out.print(list2);
	}

上述鄰接矩陣所表示的圖如下:
在這裏插入圖片描述
測試結果如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章