MIT-Curricular/DS/C/Lab/Week12/DFS.c

60 lines
1.5 KiB
C
Raw Normal View History

2024-10-15 11:13:31 +05:30
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 100
typedef struct Node {
int vertex;
struct Node* next;
} Node;
typedef struct Graph {
int numVertices;
Node** adjLists;
} Graph;
Graph* createGraph(int vertices) {
Graph* graph = malloc(sizeof(Graph));
graph->numVertices = vertices;
graph->adjLists = malloc(vertices * sizeof(Node*));
for (int i = 0; i < vertices; i++) graph->adjLists[i] = NULL;
return graph;
}
void addEdge(Graph* graph, int src, int dest) {
Node* newNode = malloc(sizeof(Node));
newNode->vertex = dest; newNode->next = graph->adjLists[src];
graph->adjLists[src] = newNode;
newNode = malloc(sizeof(Node));
newNode->vertex = src; newNode->next = graph->adjLists[dest];
graph->adjLists[dest] = newNode;
}
void dfsUtil(Graph* graph, int vertex, int* visited) {
visited[vertex] = 1;
printf("%d ", vertex);
for (Node* temp = graph->adjLists[vertex]; temp; temp = temp->next) {
if (!visited[temp->vertex]) dfsUtil(graph, temp->vertex, visited);
}
}
void dfs(Graph* graph, int startVertex) {
int visited[MAX_VERTICES] = {0};
dfsUtil(graph, startVertex, visited);
printf("\n");
}
int main() {
Graph* graph = createGraph(6);
addEdge(graph, 0, 1);
addEdge(graph, 0, 2);
addEdge(graph, 1, 3);
addEdge(graph, 1, 4);
addEdge(graph, 2, 5);
printf("DFS traversal starting from vertex 0:\n");
dfs(graph, 0);
return 0;
}