首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

写一个DFS,图里面有环 等各种情况,怎么用dfs 遍历全图

2012-11-07 
写一个DFS,图里面有环 等各种情况,如何用dfs 遍历全图RT ,即给出一个有向图 ,该图有多个子图组成,每个子图

写一个DFS,图里面有环 等各种情况,如何用dfs 遍历全图
RT ,即给出一个有向图 ,该图有多个子图组成,每个子图之间是不重叠的,图可以有环

图是用临接表的形式,我写的程序在一些情况下 感觉是栈溢出了, 应该怎么写 才能不避免呢

[解决办法]
有环的情况下应该回溯

C/C++ code
  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);
}
}
}

热点排行