From 909f00c6051eedb43ec4feaacf5cb6c1e22aee02 Mon Sep 17 00:00:00 2001 From: arpanjain97 Date: Thu, 12 Oct 2017 21:03:44 +0530 Subject: [PATCH] Add Dijkstra's Algorithm --- data_structures/graphs/Dijkstra.c | 110 ++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 data_structures/graphs/Dijkstra.c diff --git a/data_structures/graphs/Dijkstra.c b/data_structures/graphs/Dijkstra.c new file mode 100644 index 00000000..fc278b76 --- /dev/null +++ b/data_structures/graphs/Dijkstra.c @@ -0,0 +1,110 @@ +#include +#include +#include +#include + + +//Structure for storing a graph +struct Graph{ + int vertexNum; + int** edges; +}; + +//Constructs a graph with V vertices and E edges +void createGraph(struct Graph* G,int V){ + G->vertexNum = V; + G->edges =(int**) malloc(V * sizeof(int*)); + for(int i=0; iedges[i] = (int*) malloc(V * sizeof(int)); + for(int j=0; jedges[i][j] = INT_MAX; + G->edges[i][i] = 0; + } +} + +//Adds the given edge to the graph +void addEdge(struct Graph* G, int src, int dst, int weight){ + G->edges[src][dst] = weight; +} + + +//Utility function to find minimum distance vertex in mdist +int minDistance(int mdist[], int vset[], int V){ + int minVal = INT_MAX, minInd ; + for(int i=0; ivertexNum; + int mdist[V]; //Stores updated distances to vertex + int vset[V]; // vset[i] is true if the vertex i included + // in the shortest path tree + + //Initialise mdist and vset. Set distance of source as zero + for(int i=0; iedges[u][v]!=INT_MAX && mdist[u] + graph->edges[u][v] < mdist[v]) + mdist[v] = mdist[u] + graph->edges[u][v]; + + } + } + + print(mdist, V); + + return; +} + + + +//Driver Function +int main(){ + int V,E,gsrc; + int src,dst,weight; + struct Graph G; + printf("Enter number of vertices: "); + scanf("%d",&V); + printf("Enter number of edges: "); + scanf("%d",&E); + createGraph(&G,V); + for(int i=0; i