-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アルゴリズムにタイムスタンプを付ける必要があります。だから全く違ったアプローチです。 –