判断给定有向图是否存在回路

判断给定有向图是否存在回路。

输入

第一行为图中顶点的个数n; 第二行为途中弧度条数e; 第二行为顶点信息;接着e行为e条弧依附的两个顶点。

输出

该图是否存在回路,是输出yes;,不是输出no。

样例输入

4
A B C D 
A B 
A C 
B D 
C D

样例输出

no
#include<iostream>
using namespace std;
#define maxsize 100
int vis[maxsize] = {0};
int a[maxsize][maxsize];
int juge=0;
  
void findH(int n,int v)
{
    //vis[v] = 1;
    //if ( cnt!= 0 && v1 == v)juge = 1;
    int i;
    if (juge)return;
    for (i = 0; i < n; i++)
    {
        if (!vis[i] && a[v][i]){ vis[i] = 1; findH(n, i); vis[i] = 0; }//没有被访问过的点
        else if (a[v][i]&& v != i)juge = 1;
    }
}
  
int main()
{
    int n, m, i;
    char ch[maxsize],char1,char2;
    cin >> n;
    cin >> m;
    for (i = 0; i < n;i++)
    cin >> ch[i];
    for (i = 0; i < m; i++)
    {
            cin >> char1 >> char2;
            a[char1-'A'][char2-'A'] = 1;
    }
    vis[0] = 1;
    findH(n,0);
    juge?cout << "yes":cout << "no";
    //system("pause");
    return 0;
}

阅读更多
版权声明:未经博主允许不能转载文章 https://blog.csdn.net/weixin_42103959/article/details/80696625
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭