![](/img/trans.png)
[英]Is there any way to quickly find all the edges that are part of a cycle(back edges) in an undirected/directed graph?
[英]back and forward edges in directed graph
我是圖論的新手。 我正在編寫代碼以查找有向圖中的所有前向和后向邊緣。 我搜索並實現了以下代碼。 我的代碼進入了無限循環。 你能看看嗎。 我們將非常感謝您。
void dfsVisit(u)
{
u->color="gray";
u->time=count;
count++;
for(every child node v of u)
{
if(v->color == "black")
{
if(u->time < v->time)
cout<<"Edge "<<u<<"->"<<v<<" is forward edge"<<endl;
else
cout<<"Edge "<<u<<"->"<<v<<" is cross edge"<<endl;
}
if(v->color == "gray")
cout<<"Edge "<<u<<"->"<<v<<" is back edge"<<endl;
if(v->color == "white")
cout<<"Edge "<<u<<"->"<<v<<" is tree edge"<<endl;
dfsVisit(v);
}
u->color="black";
u->time=count;
count++;
}
我發現您的代碼有兩個可能的問題:
您dfsVisit
為每個孩子調用dfsVisit
,無論其顏色如何。 您將其縮進了更深的層次,但是您沒有在白色if周圍加上任何括號-基於此偽代碼,if語句僅影響cout
。 但是,由於這只是一個偽代碼,因此應該清楚地寫出編寫的原始C ++代碼。
您可以在自己的條件下使用三種顏色(灰色,黑色和白色),但是您永遠不會在任何地方設置白色。 在調用dfsVisit
之前,邊緣已初始化為白色。 (您應該考慮將enum或enum類用於顏色,它是無污染的,並且不太可能導致拼寫錯誤)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.