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

fx397993401 2012-07-06 10:25:36
RT ,即给出一个有向图 ,该图有多个子图组成,每个子图之间是不重叠的,图可以有环

图是用临接表的形式,我写的程序在一些情况下 感觉是栈溢出了, 应该怎么写 才能不避免呢
...全文
477 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nvfumayx 2012-08-08
  • 打赏
  • 举报
回复
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);
}
}
}

lzc52151 2012-07-10
  • 打赏
  • 举报
回复
跟有没有环关系不大,用数组标识已遍历的点就行,每次回溯的时候记得把数组内容也回溯
DeDeWo 2012-07-06
  • 打赏
  • 举报
回复
有环的情况下应该回溯

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] ++;

}

fx397993401 2012-07-06
  • 打赏
  • 举报
回复
算法导论上的写法是这样的 ,
但是这个算法对于 下面的情况就会栈溢出 ,2 3 4 构成一个环,
1 2
2 3
3 4
4 2



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);
Dfs(nodeid);
}

}
//used[start] ++;
mark[start] = 1;
}

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧