Блог пользователя Dg10

Автор Dg10, история, 4 года назад, По-английски

Simply perform a dfs and count the number of nodes visited, if the count increases number of vertices then there is definitely a cycle.

#include<bits/stdc++.h>
using namespace std;
bool vis[100005];
int maxlencyclepossible = 0, tillvisitednode = 0;
void dfs(vector<int> graph[], int node) {
	if (tillvisitednode > maxlencyclepossible) {
		return;
	}
	for (auto child : graph[node]) {
		vis[node] = true;
		tillvisitednode++;
		dfs(graph, child);
	}
	return;
}
void solve() {
	int vert, edge;
	vert = 4, edge = 3;
	memset(vis, false, sizeof(vis));
	vector<int> graph[vert];
	// zero based
	graph[0].push_back(1);
	graph[2].push_back(3);
	graph[3].push_back(2);
	//cycle between 2 and 3
	tillvisitednode = 0;
	maxlencyclepossible = vert + 10;
	tillvisitednode = 0;
	maxlencyclepossible = vert + 10;
	for (int i = 0; i < vert; i++) {
		tillvisitednode = 0;
		if (!vis[i]) {
			dfs(graph, i);
		}
		if (tillvisitednode > maxlencyclepossible) {
			break;
		}
	}
	if (tillvisitednode > maxlencyclepossible) {
		cout << "Cycle Detected\n";
		return;
	}
	cout << "No Cycle Detected\n";
	return ;
}
int main() {
	solve();
	return 0;
}

Полный текст и комментарии »

  • Проголосовать: нравится
  • -40
  • Проголосовать: не нравится