#include #include #include #include //Structure for storing edge struct Edge{ int src,dst,weight; }; //Structure for storing a graph struct Graph{ int vertexNum; int edgeNum; struct Edge* edges; }; //Constructs a graph with V vertices and E edges void createGraph(struct Graph* G,int V,int E){ G->vertexNum = V; G->edgeNum = E; G->edges = (struct Edge*) malloc(E * sizeof(struct Edge)); } //Adds the given edge to the graph void addEdge(struct Graph* G, int src, int dst, int weight){ static int ind; struct Edge newEdge; newEdge.src = src; newEdge.dst = dst; newEdge.weight = weight; G->edges[ind++]= newEdge; } //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 E = graph->edgeNum; int dist[V]; //Initialize distances array as INF for all except source //Intialize source as zero for(int i=0; iedges[j].src; int v = graph->edges[j].dst; int w = graph->edges[j].weight; if(dist[u]!=INT_MAX && dist[u] + w < dist[v]) dist[v] = dist[u] + w; } //Iterate inner loop once more to check for negative cycle for(int j = 0; jedges[j].src; int v = graph->edges[j].dst; int w = graph->edges[j].weight; if(dist[u]!=INT_MAX && dist[u] + w < dist[v]){ printf("Graph contains negative weight cycle. Hence, shortest distance not guaranteed."); return; } } print(dist, 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,E); for(int i=0; i