DAG中两个顶点之间的最大路径长度

问题描述 投票:0回答:1

给定有向无环图,G和两个顶点u和v,我需要找到G中最长的uv路径。DFS调用exploring函数将访问的顶点存储在visit []布尔数组中(如果访问了顶点,则为数组设置为true,否则为false)。顶点u和v永远不会标记为已访问。变量MAX存储最大路径;当在explorer()函数中达到STOP顶点时,将MAX设置为当前路径长度和MAX值的最大值。该代码无法正常工作。

import java.util.Iterator;
import java.util.LinkedList;

public class DAG2 {
int vertex;
LinkedList<Integer> list[];

int START, STOP;
int length = 0;
int MAX = 0;

public DAG2(int vertex) {

    this.vertex = vertex;
    list = new LinkedList[vertex];
    for (int i = 0; i < vertex; i++) {
        list[i] = new LinkedList<>();
    }

}

public void addEdge(int source, int destination) {

    // add edge
    list[source].addFirst(destination);

}

void DFS(int u, int v) {

    boolean[] visited = new boolean[this.vertex];
    START = u;
    STOP = v;
    explore(v, visited);
}

private void explore(int v, boolean[] visited) {
    // TODO Auto-generated method stub

    visited[v] = true;
    visited[START] = false;
    visited[STOP] = false;

    Iterator<Integer> i = list[v].listIterator();

    while (i.hasNext()) {
        int n = i.next();
        length++;
        if (n == STOP) {
            MAX = Math.max(MAX, length);
            length = 0;
        }

        if (!visited[n])
            explore(n, visited);
    }
}

public static void main(String args[]) {
    DAG2 g = new DAG2(8);

    g.addEdge(1, 2);
    g.addEdge(1, 3);
    g.addEdge(2, 4);
    g.addEdge(2, 5);
    g.addEdge(3, 6);
    g.addEdge(4, 7);
    g.addEdge(5, 7);
    g.addEdge(6, 5);
    g.addEdge(6, 7);
    // new
    g.addEdge(2, 3);
    g.addEdge(3, 5);
    g.addEdge(5, 4);

}
}
depth-first-search directed-acyclic-graphs
1个回答
0
投票

我注意到“访问”数组的第一件事是,如果您要查找多个路径,则可能会多次访问一个节点(因为可能会导致多个数学运算,例如1-> 3 -> 4和1-> 2-> 3-> 4都将访问3)。

© www.soinside.com 2019 - 2024. All rights reserved.