题目描述
判断给定有向图是否存在回路。
输入
第一行为图中顶点的个数n; 第二行为途中弧度条数e;第三行为顶点信息;接着e行为e条弧依附的两个顶点。
输出
#include<bits/stdc++.h>
using namespace std;
int m, n, g = 0, a[105];
char s[105];
vector<char>v[105];
void dfs(char c1, char c2){
if(g) return;
if(c2==c1&&a[c2]){
g++;
return;
}
for(auto i:v[c2]){
if(!a[i]){
a[i]++;
dfs(c1, i);
a[i]--;
}
}
}
int main(){
cin>>m>>n;
for(int i = 0; i < n; i++) cin>>s[i];
for(int i = 0; i < m; i++){
char c1, c2;
cin>>c1>>c2;
v[c1].push_back(c2);
}
for(int i = 0; i < n; i++){
dfs(s[i], s[i]);
if(g) break;
}
cout<<((g==0)?"no":"yes");
return 0;
}
该图是否存在回路,是输出yes,不是输出no。