【问题标题】:DFS iterative function does not work properlyDFS 迭代函数不能正常工作
【发布时间】:2017-05-12 21:54:30
【问题描述】:

我正在尝试在图形上执行一些基本功能(使用布尔矩阵)。除了 DFS 之外,它们都可以工作。它给了我一些随机数。几个小时以来我一直在尝试解决这个问题,但仍然没有......(代码编译,但它显示错误)。顺便说一句,DFS 的结果必须是一个矩阵,有栈数,还有每个图顶点的“展开”。

我的错误在哪里?

我的程序:

    public int[][] DFS(int s) {

    Stack<Integer> stack = new Stack<Integer>();
    stack.push(s);
    int recorder = 1;
    int[][] mark = new int[nbs][2];

    mark[s][0] = recorder++;

    boolean[] decouvert = new boolean[nbs];
    while (!stack.isEmpty()) {
        s = stack.pop();
        mark[s][1] = recorder++;
        if (!decouvert[s]) {
            decouvert[s] = true;
            for (int i = 0; i < nbs; i++) {
                if (m[s][i]) {
                    stack.push(i);
                    mark[s][0] = recorder++;
                }
            }
        }
    }

    return mark;
}

【问题讨论】:

  • 这就是结果:link 这个图:link 我主要这样做:int[][] r2 = g3.DFS(0); for (int i = 0; i &lt; g3.nbs; i++) { System.out.println(i + ": " + r2[i][0] + " | " + r2[i][1]); }(注意:nbs 是图中的顶点数)跨度>
  • 我的变量“decouvert”的意思是“发现”

标签: java graph microsoft-distributed-file-system


【解决方案1】:

嗯,我认为一个问题是行:

mark[s][0] = recorder++;

如果我正确阅读了您的代码,它应该是mark[i][0]。然后,即使您已经在该节点中,它也会覆盖该值,然后才能有效地弄乱它的计数器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多