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

写一个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);
}
}
}