From 158a5eeadbc41fb9bdf66e6a9f3c0bbd68bcd796 Mon Sep 17 00:00:00 2001 From: Amneesh Singh Date: Thu, 29 Dec 2022 18:15:25 +0530 Subject: [PATCH] exp 13: init Signed-off-by: Amneesh Singh --- 13.c | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 13.png | Bin 0 -> 8602 bytes 2 files changed, 136 insertions(+) create mode 100644 13.c create mode 100644 13.png diff --git a/13.c b/13.c new file mode 100644 index 0000000..0d8465e --- /dev/null +++ b/13.c @@ -0,0 +1,136 @@ +#include +#include +#include + +typedef struct Node node; +struct Node { + int vertex; + struct Node *next; +}; + +typedef struct List list; +struct List { + node *head; + node *tail; +}; + +typedef struct Graph graph; +struct Graph { + int nvertices; + int *visited; + list *vertices; +}; + +graph *init_graph(int n) { + graph *graph = malloc(sizeof(struct Graph)); + + graph->nvertices = n; + graph->vertices = malloc(n * sizeof(struct List)); + graph->visited = malloc(n * sizeof(int)); + + memset(graph->visited, 0, sizeof(int) * n); + + return graph; +} + +void insert(list *list, int vertex) { + node *new = malloc(sizeof(struct Node)); + new->next = NULL; + new->vertex = vertex; + + if (!list->head) + list->head = list->tail = new; + else + list->tail->next = new, list->tail = new; +} + +void pop(list *list) { + if (!list->head) + return; + + node *next = list->head->next; + free(list->head); + + if (!next) + list->tail = next; + list->head = next; +} + +void add_edge(graph *graph, int src, int dst) { + insert(&graph->vertices[src], dst); + insert(&graph->vertices[dst], src); +} + +void dfs(struct Graph *graph, int vertex) { + list list = graph->vertices[vertex]; + + printf("%d ", vertex); + graph->visited[vertex] = 1; + + node *cur = list.head; + + while (cur) { + if (!graph->visited[cur->vertex]) + dfs(graph, cur->vertex); + + cur = cur->next; + } +} + +void bfs(struct Graph *graph, int _vertex) { + list next; + next.head = next.tail = NULL; + + graph->visited[_vertex] = 1; + insert(&next, _vertex); + + while (next.head) { + int vertex = next.head->vertex; + list list = graph->vertices[vertex]; + node *cur = list.head; + + printf("%d ", vertex); + pop(&next); + + while (cur) { + if (!graph->visited[cur->vertex]) { + graph->visited[cur->vertex] = 1; + insert(&next, cur->vertex); + } + + cur = cur->next; + } + } +} + +int main() { + const int ROOT = 0; + const int SIZE = 5; + + struct Graph *graph = init_graph(SIZE); + add_edge(graph, 0, 1); + add_edge(graph, 0, 3); + add_edge(graph, 0, 4); + add_edge(graph, 2, 3); + add_edge(graph, 1, 3); + + printf("DFS: "); + dfs(graph, ROOT); + printf("\n"); + + memset(graph->visited, 0, sizeof(int) * graph->nvertices); + + printf("BFS: "); + bfs(graph, ROOT); + printf("\n"); + + // free + for (int i = 0; i < graph->nvertices; i++) + while(graph->vertices[i].head) + pop(&graph->vertices[i]); + free(graph->visited); + free(graph->vertices); + free(graph); + + return 0; +} diff --git a/13.png b/13.png new file mode 100644 index 0000000000000000000000000000000000000000..da75f048b43a467b210e7f23c15cf08b8d0c554e GIT binary patch literal 8602 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 CCqTmh literal 0 HcmV?d00001