【发布时间】:2018-08-19 18:17:57
【问题描述】:
请告诉我为什么这段代码无法分析是否存在循环 无向图?代码如下。这是关于 spoj 的 PT07Y 问题。我正在做的是获取一个节点并执行 dfs。如果我访问同一个节点,则在执行 dfs 时,我说有一个循环。从一个节点执行 dfs 后,我将访问的数组设置为 false 并为下一个节点执行,直到我得到一个循环或访问所有节点。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
bool vis[10001];
int dfs(int n,vector <int> v[],int a)
{
vis[n]=true;
for(int i=0;i<v[n].size();i++)
{
if(v[n][i]==a)
return 1;
if(vis[v[n][i]]==false)
{
dfs(v[n][i],v,a);
}
}
return 0;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,m,i,a,b,cc;
cin>>n>>m;
vector <int> v[n+1];
memset(vis,false,n+1);
for(i=0;i<m;i++)
{
cin>>a>>b;
v[a].push_back(b);
}
for(i=1;i<=n;i++)
{
if(dfs(i,v,i))
{
cout<<"NO"<<endl;
return 0;
}
memset(vis,false,sizeof(vis));
}
cc=-1;
for(i=1;i<=n;i++)
{
if(vis[i]==false)
{
cc++;
if(cc>0)
{
cout<<"NO"<<endl;
return 0;
}
int m= dfs(i,v,-1);
}
}
cout<<"YES"<<endl;
return 0;
}
【问题讨论】:
标签: c++ graph tree depth-first-search cycle