使用邻接矩阵(Java)的图的DFS

时间:2015-03-16 02:24:59

标签: java depth-first-search

您好,我执行Depth-First Traversal时,我的代码显示错误的顺序有问题

class graphs{

public static void main(String [] args){
    int[][] adjMatrix = { {0, 1, 0, 0, 1, 1, 0, 0},
            {1, 0, 0, 0, 0, 1, 1, 0},
            {0, 0, 0, 1, 0, 0, 1, 0},
            {0, 0, 1, 0, 0, 0, 0, 1},
            {1, 0, 0, 0, 0, 1, 0, 0},
            {1, 1, 0, 0, 1, 0, 0, 0},
            {0, 1, 1, 0, 0, 0, 0, 1},
            {0, 0, 0, 1, 0, 0, 1, 0}};
    boolean[] visited = {false, false, false, false, false, false, false, false};
    int n = 8;

    DFS(adjMatrix, visited, n, 0);
}

public static void DFS(int[][] adjMatrix, boolean [] visited,int n, int i){
    System.out.print(" " + (i+1));
    visited[i]= true;
    for (int j = 0; j<n;j++){
        if(!(visited[j]) && adjMatrix[i][j]==1){
            DFS(adjMatrix, visited, n, j);
        }

    }
  }
}

我被告知我应该得到:1 2 6 7 4 3 5 8

然而,我继续得到:1 2 6 5 7 3 4 8

我做错了什么?

编辑:它应该显示所访问的订单。也许这就是我搞砸的地方?

编辑:此外,我怎么能让它显示死角的顺序?

对于死胡同会像这样工作:

public static void DFS(int[][] adjMatrix, boolean [] visited,int n, int i){
System.out.print(" " + (i+1));
visited[i]= true;
for (int j = 0; j<n;j++){
    if(!(visited[j]) && adjMatrix[i][j]==1){
        DFS(adjMatrix, visited, n, j);
    }

}
a.add(i+1); //assume a is an integer ArrayList and will be printed out later
}

2 个答案:

答案 0 :(得分:0)

你被告知错了,你的输出是正确的。

您可以手动检查:

       1  2  3  4  5  6  7  8
    1 {0, 1, 0, 0, 1, 1, 0, 0}
    2 {1, 0, 0, 0, 0, 1, 1, 0}
    3 {0, 0, 0, 1, 0, 0, 1, 0}
    4 {0, 0, 1, 0, 0, 0, 0, 1}
    5 {1, 0, 0, 0, 0, 1, 0, 0}
    6 {1, 1, 0, 0, 1, 0, 0, 0}
    7 {0, 1, 1, 0, 0, 0, 0, 1}
    8 {0, 0, 0, 1, 0, 0, 1, 0}

你只是&#34;跳跃&#34;直到找到0,我们从1开始,第一行中的第一个1位于标记为2的列,我们移动到第2行,第2行中尚未访问的第一个1 /当前未被访问的是6 ,我们移动到第6行,第一个有趣的第一个是5,我们移到第5行,那一行没有有趣的1,因为我们当前在已经访问过1和6的路径上,所以我们回溯了,此时我们有1,2,6,5。我们回溯到第2行,首先是有趣的1是7,第7行是3,3是4,然后回溯到7,然后到8,结果是所有节点。

@Edit:只是为了明确其他答案可能可以用DFS(取决于你将处理邻居的顺序)但你应该提供的答案绝对不可能输入

@Edit:所以准确地说它将是1 - &gt; 2 - &gt; 6 - &gt; 5 - &gt;回溯(2) - &gt; 7 - &gt; 3 - &gt; 4 - &gt; 8 - &gt;端

答案 1 :(得分:0)

基于您的矩阵,adjMatrix [6] [5] = 1但adjMatrix [6] [7] = 0,因此您的预期答案1 2 6 7 4 3 5 8不正确,因为6和6之间没有链接7.您应该再次检查输入数据,很可能是您错误输入的。