-1
#include <bits/stdc++.h>
using namespace std;
int n,m;
vector<int> adj[51];
int visited[51];
bool flag;
void dfs(int i,int parent){
vector<int>::iterator it;
for(it = adj[i].begin();it!=adj[i].end();it++){
if(!visited[*it]){
visited[*it]=1;
dfs(*it,i); // passing parent element
}
if(visited[*it] && (*it !=parent)){
flag=true; return;
}
}
}
int main(){
int a,b;
cin>>n>>m;
for(int i=0;i<m;i++){ // graph ready.
cin>>a>>b;
if(a==b){
cout<<"YES"; return 0;
}
adj[a].push_back(b);
adj[b].push_back(a);
}
for(int i=1;i<=n;i++){
std::vector<int>::iterator it;
for(it=adj[i].begin();it!=adj[i].end();it++){
if(!visited[*it]){
visited[*it]=1;
dfs(*it,-1);
}
}
}
if(flag){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
任何人都可以檢查我的代碼,並告訴我我錯過了哪個測試用例。 hackerearth只有60/100。我在這裏使用父變量來跟蹤被認爲是循環的單個邊。如何檢查無向圖中循環的存在性?
如果圖形是定向的,這段代碼能否正常工作? –
@SahilKumar根本沒有。 –
@SahilKumar對於有向圖,你需要有時間戳和dfs算法。所以它是完全不同的方法。 –