[英]Tricolor graph algorithm and constness
為了進行拓撲排序,我需要在圖形上應用三色算法[1]。 也就是說,假設頂點為白色,該算法將像
void visit(Vertex& v)
{
v.color=GRAY;
auto child=v.children.begin();
auto v_end=v.children.end();
while(child!=v_end)
{
if(child->color==GRAY)
{throw "Loop detected";}
if(child->color==WHITE)
{visit(*child);}
++child;
}
v.color=BLACK;
}
現在,我希望算法不修改v
,因此它可以是const
而不mutable
。 使這項工作最有效的方法是什么? 一些想法是
std::map<Vertex*,color_type>
[1] http://www.cs.cornell.edu/courses/cs2112/2012sp/lectures/lec24/lec24-12sp.html
我通過在構造過程中為圖中的每個節點指定一個ID來解決了這個問題。 然后,在對圖形進行排序時,我使用了一個臨時數組。 復雜:
因此沒有額外的復雜性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.