为什么需要在 dfs 函数中通过引用传递 anc 向量?

问题描述

class Solution
{
    public:
    //Function to detect cycle in a directed graph.
    bool dfs(int V,vector<int> adj[],vector <bool>& isvis,int start,vector<bool>**&**anc)
    {
        isvis[start]=1;
        anc[start]=true;
        for(auto nb : adj[start])
        {   
                
            if(!isvis[nb])
            {
                if(dfs(V,adj,isvis,nb,anc))
                return true;
            }
            
            if(anc[nb]==true)
                return true;
        }
        
        for(int i=0;i<V;i++)
        {
            cout<<i<<" "<<anc[i]<<endl;
        }
        
        anc[start]=false;
        return false;
    }
    bool isCyclic(int V,vector<int> adj[]) 
    {
       vector < bool > isvis(V,false);
       vector <bool> anc(V,false);
       for(int i=0;i<V;i++)
       {
           if(!isvis[i])
           {
               if(dfs(V,i,anc))
               return true;
           }
       }
       return false;
    }
};

解决方法

因为函数修改了参数(在anc[start]=true;中)。如果它是按值传递的,它将拥有自己的向量副本并修改该副本,因此不会修改 anc 中的 isCyclic 变量。