我正在尝试使用递归和2D数组在邻接矩阵上实现深度优先搜索并遇到问题。我还是新手,对不起,如果我的错误太明显了。
如果所有数字都为0且未显示所访问的组件,则我的代码不会读取该行。
例如,10x10 martrix在行,列(9,6)和(6,9)上分别只有1。其他一切都是0.
应输出
Component: 1
Component: 2
Component: 3
Component: 4
Component: 5
Component: 6 9
Component: 7
Component: 8
Component: 10
Total number of Components: 9
到目前为止,这是我的方法。
public static void dfs(int i, int[][] G) {
boolean [] visited = new boolean[10];
if(!visited[i]){
visited[i] = true; // Mark node as "visited"
System.out.println("Compnent: " );
System.out.println( i+1 + " ");
for (int j = 0; j < G[i].length-1; j++) {
if (G[i][j]==1 && !visited[j]) {
dfs(j, G); // Visit node
}
}
}
}
上面显示的只是组件1,然后方法停止。
答案 0 :(得分:4)
在您的示例中,第一个节点与其他节点之间没有连接。因此,我们无法从第一个节点转到任何地方。
代码应该是这样的:
public static void dfs(int i, int[][] graph, boolean[] visited) {
if(!visited[i]){
visited[i] = true; // Mark node as "visited"
System.out.print(i+1 + " ");
for (int j = 0; j < graph[i].length; j++) {
if (graph[i][j]==1 && !visited[j]) {
dfs(j, graph, visited); // Visit node
}
}
}
}
public static void main(String[] args) {
// your matrix declare
boolean [] visited = new boolean[10];
int count = 0;
for(int i = 0; i < graph.length; i++) {
if(!visited[i]) {
System.out.println("Compnent: " );
dfs(i,graph,visited);
++count;
}
}
System.out.println("Total number of Components: " + count);
}