Grafalgo
Library of useful data structures and algorithms
/Users/jst/src/grafalgo/cpp/graphAlgorithms/sPath/allPairsRep.cpp
00001 // usage: 
00002 //      allPairsRep method reps n p lo hi 
00003 //
00004 // allPairsRep repeated generates a random graph with the specified
00005 // parameters and computes shortest paths with the specified method.
00006 // Reps is the number of repetitions.
00007 //
00008 // If a graph has a negative length cycle, it prints an
00009 // error message and halts.
00010 
00011 #include "stdinc.h"
00012 #include "Wdigraph.h"
00013 
00014 using namespace grafalgo;
00015 
00016 extern void dijkstraAll(Wdigraph&, int**, vertex**);
00017 extern void floyd(Wdigraph&, int**, vertex**);
00018 
00019 int main(int argc, char *argv[]) {
00020         int i, reps, n, m, lo, hi;
00021         vertex u; Wdigraph dig; 
00022         int** dist; vertex** parent; vertex** mid;
00023 
00024         if (argc != 7 ||
00025             sscanf(argv[2],"%d",&reps) != 1 ||
00026             sscanf(argv[3],"%d",&n) != 1 ||
00027             sscanf(argv[4],"%d",&m) != 1 ||
00028             sscanf(argv[5],"%d",&lo) != 1  ||
00029             sscanf(argv[6],"%d",&hi) != 1)
00030                 Util::fatal("usage: allPairsRep method reps n p lo hi");
00031         
00032         if (argc != 2) Util::fatal("usage: allPairs method");
00033 
00034         if (strcmp(argv[1],"floyd") == 0) {
00035                 dist = new int*[dig.n()+1];
00036                 mid = new vertex*[dig.n()+1];
00037                 for (u = 1; u <= dig.n(); u++) {
00038                         dist[u] = new int[dig.n()+1];
00039                         mid[u] = new vertex[dig.n()+1];
00040                 }
00041         } else if (strcmp(argv[1],"dijkstra") == 0) {
00042                 dist = new int*[dig.n()+1];
00043                 parent = new vertex*[dig.n()+1];
00044                 for (u = 1; u <= dig.n(); u++) {
00045                         dist[u] = new int[dig.n()+1];
00046                         parent[u] = new vertex[dig.n()+1];
00047                 }
00048         } else {
00049                 Util::fatal("allPairs: undefined method");
00050         }
00051 
00052         for (i = 1; i <= reps; i++) {
00053                 dig.rgraph(n,m); dig.randLength(lo,hi);
00054                 if (strcmp(argv[1],"floyd") == 0) {
00055                         floyd(dig,dist,mid);
00056                 } else if (strcmp(argv[1],"dijkstra") == 0) {
00057                         dijkstraAll(dig,dist,parent);
00058                 }
00059         }
00060 }
 All Classes Files Functions Variables Typedefs Friends