#include <stdio.h>
#include <stdbool.h>
#define MAX 5
// Graph represented by adjacency matrix
int graph[MAX][MAX] = {
{0,1,0,1,0}, // Node 1 connected to 2 and 4
{1,0,1,0,0}, // Node 2 connected to 1 and 3
{0,1,0,1,0}, // Node 3 connected to 2 and 4
{1,0,1,0,0}, // Node 4 connected to 1 and 3
{0,0,0,0,0} // Node 5 isolated
};
// Tree represented by adjacency matrix
int tree[MAX][MAX] = {
{0,1,1,0,0}, // Node 1 connected to 2 and 3
{1,0,0,0,0}, // Node 2 connected to 1
{1,0,0,0,0}, // Node 3 connected to 1
{0,0,0,0,0}, // Node 4 isolated
{0,0,0,0,0} // Node 5 isolated
};
// Visited array for DFS
bool visited[MAX];
// DFS to detect cycle in graph
bool dfs_cycle(int node, int parent, int adj[MAX][MAX]) {
visited[node] = true;
for (int i = 0; i < MAX; i++) {
if (adj[node][i]) {
if (!visited[i]) {
if (dfs_cycle(i, node, adj))
return true;
} else if (i != parent) {
return true; // cycle found
}
}
}
return false;
}
int main() {
// Check cycle in graph
for (int i = 0; i < MAX; i++) visited[i] = false;
bool graph_has_cycle = false;
for (int i = 0; i < MAX; i++) {
if (!visited[i]) {
if (dfs_cycle(i, -1, graph)) {
graph_has_cycle = true;
break;
}
}
}
// Check cycle in tree
for (int i = 0; i < MAX; i++) visited[i] = false;
bool tree_has_cycle = false;
for (int i = 0; i < MAX; i++) {
if (!visited[i]) {
if (dfs_cycle(i, -1, tree)) {
tree_has_cycle = true;
break;
}
}
}
printf("Graph has cycle: %s\n", graph_has_cycle ? "Yes" : "No");
printf("Tree has cycle: %s\n", tree_has_cycle ? "Yes" : "No");
return 0;
}