Grafalgo
Library of useful data structures and algorithms
/Users/jst/src/grafalgo/cpp/graphAlgorithms/sPath/allPairs.cpp
00001 // usage: allPairs method
00002 //
00003 // Allpairs reads a graph from stdin, computes a solution to the all pairs
00004 // shortest path problem using the specified method and prints the result.
00005 //
00006 
00007 #include "stdinc.h"
00008 #include "Wdigraph.h"
00009 
00010 using namespace grafalgo;
00011 
00012 extern void dijkstraAll(Wdigraph&, int**, vertex**);
00013 extern void floyd(Wdigraph&, int**, vertex**); 
00014 
00015 int main(int argc, char *argv[]) {
00016         vertex u, v; string s;
00017         Wdigraph dig; cin >> dig;
00018         
00019         if (argc != 2) Util::fatal("usage: allPairs method");
00020 
00021         if (strcmp(argv[1],"floyd") == 0) {
00022                 int** dist = new int*[dig.n()+1];
00023                 vertex** mid = new vertex*[dig.n()+1];
00024                 for (u = 1; u <= dig.n(); u++) {
00025                         dist[u] = new int[dig.n()+1]; 
00026                         mid[u] = new vertex[dig.n()+1];
00027                 }
00028         
00029                 floyd(dig,dist,mid);
00030         
00031                 cout << "distances\n\n    ";
00032                 for (v = 1; v <= dig.n(); v++) {
00033                         cout << dig.item2string(v,s) << " ";
00034                 }
00035                 printf("\n");
00036                 for (u = 1; u <= dig.n(); u++) {
00037                         cout << "  " << dig.item2string(v,s) << ": ";
00038                         for (v = 1; v <= dig.n(); v++) {
00039                                 cout << setw(3) << dist[u][v] << " ";
00040                         }
00041                         cout << endl;
00042                 }
00043                 cout << "\n\nmidpoint array\n\n    ";
00044                 for (v = 1; v <= dig.n(); v++)  {
00045                         cout << "  " << dig.item2string(v,s) << " ";
00046                 }
00047                 cout << endl;
00048                 for (u = 1; u <= dig.n(); u++) {
00049                         cout << " " << dig.item2string(v,s) << ": ";
00050                         for (v = 1; v <= dig.n(); v++) {
00051                                 cout << setw(3) << dig.item2string(mid[u][v],s)
00052                                      << " ";
00053                         }
00054                         cout << endl;
00055                 }
00056         } else if (strcmp(argv[1],"dijkstra") == 0) {
00057                 int** dist = new int*[dig.n()+1];
00058                 vertex** parent = new vertex*[dig.n()+1];
00059                 for (u = 1; u <= dig.n(); u++) {
00060                         dist[u] = new int[dig.n()+1];
00061                         parent[u] = new vertex[dig.n()+1];
00062                 }
00063 
00064                 dijkstraAll(dig,dist,parent);
00065         
00066                 cout << "distances\n\n    ";
00067                 for (v = 1; v <= dig.n(); v++) {
00068                         cout << "  "<< dig.item2string(v,s) << " ";
00069                 }
00070                 cout << endl;
00071                 for (u = 1; u <= dig.n(); u++) {
00072                         cout << " " << dig.item2string(v,s) << ": ";
00073                         for (v = 1; v <= dig.n(); v++) {
00074                                 cout << setw(3) << dist[u][v] << " ";
00075                         }
00076                         cout << endl;
00077                 }
00078         
00079                 cout << "\n\nshortest path trees\n\n    ";
00080                 for (v = 1; v <= dig.n(); v++)  {
00081                         cout << "  " << dig.item2string(v,s);
00082                 }
00083                 cout << endl;
00084                 for (u = 1; u <= dig.n(); u++) {
00085                         cout << " " << dig.item2string(v,s) << ": ";
00086                         for (v = 1; v <= dig.n(); v++) {
00087                                 cout << setw(3) << dig.item2string(
00088                                                      parent[u][v],s)
00089                                      << " ";
00090                         }
00091                         cout << endl;
00092                 }
00093         } else {
00094                 Util::fatal("allPairs: undefined method");
00095         }
00096 }
 All Classes Files Functions Variables Typedefs Friends