写一个DFS,图里面有环 等各种情况,如何用dfs 遍历全图
RT ,即给出一个有向图 ,该图有多个子图组成,每个子图之间是不重叠的,图可以有环
图是用临接表的形式,我写的程序在一些情况下 感觉是栈溢出了, 应该怎么写 才能不避免呢
[解决办法]
有环的情况下应该回溯
void Dfs(int start) { vector<int > li = vmap[start]; for(vector<int>::iterator iter = li.begin() ; iter != li.end() ; iter ++){ int nodeid = *iter; if(mark[nodeid] == 0){ //path.push(nodeid); mark[start]=1; Dfs(nodeid); mark[start]=0; //回溯 } } //used[start] ++; }
[解决办法]
跟有没有环关系不大,用数组标识已遍历的点就行,每次回溯的时候记得把数组内容也回溯
[解决办法]
void Dfs(int start)
{
mark[start] = 1; // 表示访问一个节点.
vector<int > li = vmap[start];
for(vector<int>::iterator iter = li.begin() ; iter != li.end() ; iter ++){
int nodeid = *iter;
if(mark[nodeid] == 0){
//path.push(nodeid);
Dfs(nodeid);
}
}
}