/* SI 335 Spring 2012 * Project 6 * This is a (very simple) program that generates random * test cases (search queries) for a given graph. * Besides the file that holds the graph, the only input * is the number of queries to generate. These can then be * fed into the "drive" program via standard in. */ #include <cstdlib> #include <ctime> #include <iostream> #include <fstream> #include <vector> #include <algorithm> using namespace std; // Returns a random integer between 0 and n-1. int randomInt(int n); // Prints an error message and exits ungracefully void error (const char* msg); int main (int argc, char** argv) { srand(time(NULL)); // Check command-line arguments if (argc != 3) { cerr << "Usage: " << argv[0] << " <k> <graph_file>" << endl; error ("Wrong number of arguments"); } int k = atoi(argv[1]); if (k <= 0) error ("k must be positive"); ifstream graph (argv[2]); if (!graph) error("Bad graph filename"); int n, m; graph >> n >> m; // Read in city names vector<string> cities(n); for (int i=0; i<n; ++i) graph >> cities[i]; graph.close(); for (int i=0; i<k; ++i) { int u,v; do { u = randomInt(n); v = randomInt(n); } while (u == v); cout << cities[u] << ' ' << cities[v] << ' ' << randomInt(501) << endl; } return 0; } // Returns a random integer between 0 and n-1. int randomInt(int n) { int r, max = RAND_MAX - ((RAND_MAX-n+1) % n); do { r = rand(); } while (r > max); return (r % n); } // Prints an error message and exits ungracefully void error (const char* msg) { cerr << "ERROR:" << endl << msg << endl; exit(1); }