0
我在與歌廳我的DFS正常工作的問題。 該圖conected這樣的:向DFS在java中
0 --> 1
0 --> 5
5 --> 4
4 --> 3
4 --> 2
2 --> 3
2 --> 0
3 --> 2
3 --> 5
所以後,我運行它通過我的DFS的結果應該是:
0,1,5,4,2,3
,但我發現
0,1,5,2,3,4
繼承人的代碼:
package kth.id2010.lab.lab05;
public class DFS {
static void dfs(int edges[][], int vertex, boolean[] visited){
visited[vertex] = true;
for(int i = vertex + 1; i < edges[vertex].length; i++){
if(edges[vertex][i] == 1 && !visited[i]){
dfs(edges,i,visited);
}
}
}
public static void main(String[] args){
int n = 6;
int[][] edges = new int[n][n];
boolean[] visited = new boolean[n];
//Vertex nr: 0
edges[0][0] = 0;
edges[0][1] = 1; //0 --> 1
edges[0][2] = 0;
edges[0][3] = 0;
edges[0][4] = 0;
edges[0][5] = 1; //0 --> 5
//Vertex nr: 1
edges[1][0] = 0;
edges[1][1] = 0;
edges[1][2] = 0;
edges[1][3] = 0;
edges[1][4] = 0;
edges[1][5] = 0;
//Vertex nr: 2
edges[2][0] = 1; //2 --> 0
edges[2][1] = 0;
edges[2][2] = 0;
edges[2][3] = 1; //2 --> 3
edges[2][4] = 0;
edges[2][5] = 0;
//Vertex nr: 3
edges[3][0] = 0;
edges[3][1] = 0;
edges[3][2] = 1; //3 --> 2
edges[3][3] = 0;
edges[3][4] = 0;
edges[3][5] = 1; //3 --> 5
//Vertex nr: 4
edges[4][0] = 0;
edges[4][1] = 0;
edges[4][2] = 1; //4 --> 2
edges[4][3] = 1; //4 --> 3
edges[4][4] = 0;
edges[4][5] = 0;
//Vertex nr: 5
edges[5][0] = 0;
edges[5][1] = 0;
edges[5][2] = 0;
edges[5][3] = 0;
edges[5][4] = 1; //5 --> 4
edges[5][5] = 0;
for(int i = 0; i <n; i++){
visited[i] = false;
}
for(int i = 0; i <n; i++){
if(visited[i] == false){
dfs(edges,i,visited);
}
}
}
}
我真的不知道爲什麼在3次後停止工作。
其實他在最後的循環隱藏在'主自己的錯誤()',它會重新開始爲每個頂點,因此所有的頂點得到包括在內。 – Sirko 2014-10-16 12:51:29
上帝現在我覺得自己很愚蠢,討厭這樣簡單。 – Necrozze 2014-10-16 12:52:58
但這很好,我們想要包括所有這些(例如,如果我們有多個未連接的子圖)?首先是相互連接的那些:) – Icewind 2014-10-16 12:53:23