#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