#include #include #include #include #include #include #include #include #include #include using namespace std; void usage(const string s) { fprintf(stderr, "usage: grid-graph rows columns seed\n"); if (s != "") fprintf(stderr, "%s\n", s.c_str()); exit(1); } int main(int argc, char **argv) { int rows, cols, i, j, n; long seed; double w, h; /* Parse and error check the command line. */ if (argc != 4) usage(""); rows = atoi(argv[1]); if (rows <= 1) usage("Rows must be > 1"); cols = atoi(argv[2]); if (cols <= 1) usage("Rows must be > 1"); if (sscanf(argv[3], "%ld", &seed) == 0) usage("Seed must be a number"); srand48(seed); w = (cols > 10) ? 10 : cols - 1; w /= (double) (cols-1); h = (rows > 10) ? 10 : rows - 1; h /= (double) (rows-1); for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { printf("%.4lf %.4lf\n", ((double) j) * w, ((double) i) * h); } } printf("Edges\n"); n = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { if (j != 0 && drand48() < .5) printf("%d\n", n*rows*cols+n-1); if (i != 0 && drand48() < .5) printf("%d\n", n*rows*cols+n-cols); if (j != 0 && i != 0 && drand48() < .5) printf("%d\n", n*rows*cols+n-cols-1); if (j != cols-1 && i != 0 && drand48() < .5) printf("%d\n", n*rows*cols+n-cols+1); n++; } } return 0; }