2012-05-05 19 views
-2

我想在直接图中找到电路,该电路从特定顶点开始到结束。我使用邻接列表数据结构来创建这个图表,但我不知道该算法将如何,请帮助我。 非常感谢在直接图中查找电路

+1

你尝试[谷歌搜索吧](http://www.google.com/#hl=en&output=search&sclient=psy-ab&q=detect+cycles+in+directed+graph&oq=检测周期+ + +在DIR&水溶液= 0&AQI = G1G-Q2&AQL =&gs_l = hp.3.0.0j0i22l2.5304.10257.0.11144.20.12.0.8.8.0.208.1915.0j11j1.12.0 ... 0.0.-eh4kSQJRfQ&PBX = 1&BAV = on.2 ,or.r_gc.r_pw.r_qf。,cf.osb&FP = d0f8cd49a0fc8cd2&BIW = 1138&波黑= 555)? –

+1

plesae发布您的尝试... –

+0

您可以使用Tarjan的算法。请参阅http://stackoverflow.com/questions/261573/best-algorithm-for-detecting-cycles-in-a-directed-graph – spinlok

回答

1

可能是这个提示将帮助:

  1. 遍历图(任何算法中 - BFS DFS)
  2. 您访问过 和存储其父
  3. 检查
  4. Color节点如果你正在遍历的节点是 已经着色,然后循环回到它的父母,直到你得到相同的 节点。
+0

非常感谢你 –

0
void DFS (Node* ptr , int node , int index , int n) 

{ INT I;

if (ptr == NULL) 
{ 
    ptr=arrNode[index].next; 
    node = ptr->vertex; 
} 

for (int i=0 ; i < n ; i++) 
{ 
    if ((node == arrNode[i].vertex) && (ptr->visit=false)) 
    { 
     ptr=arrNode[i].next; 
     ptr->visit = true; 
     s.push(arrNode[i].vertex); 
    } 
    ptr=ptr->next; 
    DFS(ptr,ptr->vertex,i+1 , n); 

} 

}

+0

我写过这段代码,出现了一些问题,我无法得到它。 我的数据结构是一个数组,它的长度=顶点数,这个数组的每个字段都有一个指向包含所有邻居的链表的指针:( –

+0

这可能会更好地编辑到您的问题中,以便读者可以看到您当前的工作。我确信一旦你这样做,你会得到更积极的回应 - 祝你好运':)' – halfer