# C: Shortest cyclic path of a graph

Write a function for finding the shortest cyclic path for every node of a directed and weighted graph. Prototype of a function is

``void path(double adj_matrix[][n]);``
``` Print nodes with length of every path. For nodes which don't have cyclic path, lenght is -1.```
``` ```
``` c programming asked Nov 10, 2015 by display_error ```
``` ```
``` ```
``` 1 Answer You can easily modify Floyd-Warshall algorithm. (If you're not familiar with graph theory at all, I suggest checking it out, e.g. getting a copy of Introduction to Algorithms). Traditionally, you start path[i][i] = 0 for each i. But you can instead start from path[i][i] = INFINITY. It won't affect algorithm itself, as those zeroes weren't used in computation anyway (since path path[i][j] will never change for k == i or k == j). In the end, path[i][i] is the length the shortest cycle going through i. Consequently, you need to find min(path[i][i]) for all i. And if you want cycle itself (not only its length), you can do it just like it's usually done with normal paths: by memorizing k during execution of algorithm. In addition, you can also use Dijkstra's algorithm to find a shortest cycle going through any given node. If you run this modified Dijkstra for each node, you'll get the same result as with Floyd-Warshall. And since each Dijkstra is O(n^2), you'll get the same O(n^3) overall complexity. The pseudo code is a simple modification of Dijkstra's algorithm. for all u in V: for all v in V: path[u][v] = infinity for all s in V: path[s][s] = 0 H = makequeue (V) .. using pathvalues in path[s] array as keys while H is not empty: u = deletemin(H) for all edges (u,v) in E: if path[s][v] > path[s][u] + l(u, v) or path[s][s] == 0: path[s][v] = path[s][u] + l(u,v) decreaseKey(H, v) lengthMinCycle = INT_MAX for all v in V: if path[v][v] < lengthMinCycle & path[v][v] != 0 : lengthMinCycle = path[v][v] if lengthMinCycle == INT_MAX: print(“The graph is acyclic.”) else: print(“Length of minimum cycle is ”, lengthMinCycle) answered Nov 10, 2015 by Swanky ```