#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을 얻었습니다. 루프로 간주되는 단일 에지를 추적하기 위해 여기서 parent 변수를 사용하고 있습니다.무향 그래프에서 사이클의 존재를 확인하는 방법은 무엇입니까?
그래프가 올바르게 처리되면이 코드가 제대로 작동합니까? –
@SahilKumar 전혀 아닙니다. –
@SahilKumar 유향 그래프의 경우 dfs 알고리즘과 함께 타임 스탬프가 필요합니다. 그래서 완전히 다른 접근법입니다. –