邻接矩阵 判断有向图中是否存在环路

#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