PROJECT 2. Graph Algorithms Implement: 1. Dijkstra's algorithm to solve the single-source shortest path problem for a directed wighted graph with nonnegative edge weights. 2. Bellman-Ford algorithm to solve the single-source shortest path problem for a directed weighted graph where some of the edge weights may be negative. 3. Floyd-Warshall algorithm to solve the all-pairs shortest path problem for a directed weighted graph where some of the edge weights may be negative (but no negative cycles). 4. Kruskal's and Prim's algorithms to solve the minimum spanning tree problem for a connected weighted graph. Reference Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms, Second edition. McGraw Hill, 2002.