使用邻接矩阵在图中查找循环

时间:2021-04-18 16:25:49

标签: depth-first-search

我有一些加权图,我将其放入邻接矩阵中。顶点之间的边缘在哪里,我正在放置一个权重,没有边缘的地方,我正在放置-1。我需要检测图形是否是非循环的,如果它是循环的,我需要以“12 1 3 2”的格式打印循环的总权重和形成这个循环的所有顶点。我尝试过 DFS,但它不仅打印形成循环的顶点,而且打印循环的整个路径。我只是想了解正确的算法。

    public boolean hasCycle(int start) {
        if (start > NUM_OF_VER)
            throw new IllegalArgumentException("No such vertex!");

        boolean [] visited = new boolean[NUM_OF_VER];
        return dfs(start, visited);
    }

    private List<Integer> connectedTo(int v) {
        List<Integer> connected = new ArrayList<>();

        for (int i = 0; i < NUM_OF_VER; i++) {
            if (adjMat[v][i]!=-1) {
                connected.add(i);
            }
        }

        return connected;
    }

    private boolean dfs(int v, boolean[] visited) {
        visited[v] = true;
        for (Integer w: connectedTo(v)) {
            if (visited[w] || dfs(w, visited)) {
                path += names[v] + " "; sum += adjMat[v][w];
                return true;
            }
        }
        return false;
    }

0 个答案:

没有答案
相关问题