对于
(1 2),(2 3),(3 1),您正在致电:
dfs(vertex1, vertex1, count)
,这给了您周期1 -> 2 -> 3 -> 1
。dfs(vertex2, vertex2, count)
,这给了您周期2 -> 3 -> 1 -> 2
。dfs(vertex3, vertex3, count)
,这给了您周期3 -> 1 -> 2 -> 3
。
因此,您要多次计数同一周期。
我能想到的最简单的解决方法是在
dfs调用后设置访问标记。
public int allCyclesDirectedmain(){ clearAll(); int[] count = new int[1]; for (Vertex v: vertexMap.values()){ dfs(v,v,count); v.setVisited(true); // <--- } return count[0];}


