Grafalgo
Library of useful data structures and algorithms
|
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 }