#include<bits/stdc++.h>
//邻接矩阵 判断有向图中是否存在环路
using namespace std;
const int N = 105;
bool isCyclicUtil(vector<vector<bool>> graph, int v, bool vis[],bool recStack[])
{
if (!vis[v])
{
vis[v] = recStack[v] = true;
for(int i = 0;i < graph[v].size();++ i)
{
if (!vis[graph[v][i]] && isCyclicUtil(graph,graph[v][i], vis, recStack))
return true;
else if (recStack[graph[v][i]])
return true;
}
}
recStack[v] = false;
return false;
}
bool isCyclic(vector<vector<bool>> graph, int n)
{
bool vis[n],recStack[n];
for(int i = 0;i < n;++ i)
vis[i] = recStack[i] = false;
for(int i = 0;i < n;++ i)
{
if (isCyclicUtil(graph, i, vis, recStack))
return true;
}
return false;
}
int main() {
int N = 4;
//cin >> N;
string s = "0 1 0 0 1 0 1 1 0 1 0 1 0 1 1 0";
//getline(cin, s);
vector<vector<bool>> graph(N, vector<bool>(N, 0));
for (int i = 0, k = 0; i < N && k < s.size(); ++i) {
for (int j = 0; j < N; ++j) {
graph[i][j] = s[k] - '0';
k += 2;
}
}
if (isCyclic(graph, N)) {
cout << "Loop" << endl;
}
else {
cout << "No Loop" << endl;
}
return 0;
}
邻接矩阵 判断有向图中是否存在环路
猜你喜欢
转载自blog.csdn.net/qq_24624539/article/details/108741877
今日推荐
周排行