我有一些加权图,我将其放入邻接矩阵中。顶点之间的边缘在哪里,我正在放置一个权重,没有边缘的地方,我正在放置-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;
}