如何从代码的这一部分检测图形是否有周期,该部分显示深度优先搜索,图形在邻接矩阵中实现
// ------------------------------------------------------------
public void dfs() // depth-first search
{ // begin at vertex 0
int k = 0;
vertexList[0].wasVisited = true; // mark it
displayVertex(0); // display it
theStack.push(0); // push it
while (!theStack.isEmpty()) // until stack empty,
{
// get an unvisited vertex adjacent to stack top
int v = getAdjUnvisitedVertex(theStack.peek());
int x = nAdjVisitedVertex(v);
if (v == -1) // if no such vertex,
theStack.pop();
else // if it exists,
{
vertexList[v].wasVisited = true; // mark it
displayVertex(v); // display it
if (x == 2)
k++;
theStack.push(v); // push it
}
} // end while
// stack is empty, so we’re done
for (int j = 0; j < nVerts; j++)
// reset flags
vertexList[j].wasVisited = false;
if(k != 0)
System.out.println("not a cycle");
else
System.out.println("cycle");
} // end dfs
答案 0 :(得分:1)
在遍历图表时,您需要继续查找已访问过的节点。如果您遇到已访问过的节点,则表示已找到循环。如果遍历完成而没有获得任何访问节点,则图中没有循环。关于实施,首先尝试,如果您遇到任何问题,请回过头来解决问题。