我知道这个问题在这个论坛和互联网上的其他地方已经被问过很多次了。但在你伸出爪子攻击我之前,请耐心等待。
我是新手学习图。作为我练习的一部分,我可以在此处的 Graph 类中添加一个方法 hasCycle() http://homepage.cs.uiowa.edu/~sriram/21/fall05/ExamplePrograms/ReaderFiles/Chap13/dfs/dfs.java .
我的方法,按照这个论坛中的建议进行 DFS Find a cycle in an undirected graph vs find one in a direct graph。
但我正在努力如何使用第一个链接中现有的 dfs 方法来实现这一点。
到目前为止,我的方法是:
public boolean hasCycle(int start)
{
vertexList[start].wasVisited = true;
for(int j = 0; j < MAX_VERTS; j++)
{
if(adjMat[start][j]==1 && vertexList[j].wasVisited==true)
return true;
else if(adjMat[start][j]==1 && vertexList[j].wasVisited==false)
{
vertexList[start].wasVisited == true;
hasCycle(j);
}
}
return false;
}
我在这里有两个问题:首先,当我在 DFSApp 类中调用 hasCycle() 而不是 theGraph.dfs() 行时,我陷入了无限递归;其次,我没有像作业所要求的那样使用给定的 dfs() 。
就我在这里做错的事情而言,任何通往正确道路的方向都会受到赞赏。
现在我只专注于在不使用 dfs() 的情况下实现正确的单独 hasCycle() 方法。