问题描述
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
变量。