#include #include #include unsigned long x_n; int rand_from(int min, int max); /***** subroutine for generating random sequence of numbers ******************/ int rand_from(int min, int max) { x_n *= 2100005341; return((int) ((x_n / 4294967296.0) * (max-min+1)) + min); } int main(int argc, char *argv[]) { int i, j, width, nodenum, seed, edgenum, edgenumorg, height, innernode; if(argc != 3){ printf("USAGE: gengraph \n"); exit(1); } else{ nodenum = atoi(argv[1]); seed = atoi(argv[2]); x_n = (unsigned long) seed; } width = (int) floor(sqrt(nodenum-1)+1); if(width <= 0) width = 1; height = (int) floor(1 + (nodenum-1) / width); innernode = nodenum - width - height + 1; /*printf("inner = %d\n", innernode);*/ edgenum = (int) floor(width + height - 2 + 4 * innernode); edgenumorg = edgenum; printf("%d\n", width); printf("%d\n", nodenum); printf("%d\n", edgenum); edgenum = 0; for(i=0; i=nodenum) break; if(i == 0){ /* horisontal edges in the first row */ if(j > 0){ printf("%d %d %d\n", rand_from(1,10), j-1, j); edgenum++; } } else{ if(j == 0){ /* vertical edges in the first column */ printf("%d %d %d\n", rand_from(1,10), (i-1)*width, i*width); edgenum++; } else{ /* inner edges */ printf("%d %d %d\n", rand_from(1,10), (i-1)*width+j, i*width+j);/*v*/ printf("%d %d %d\n", rand_from(1,10), i*width+j-1, i*width+j);/*h*/ printf("%d %d %d\n", rand_from(6,15), (i-1)*width+j-1, i*width+j);/*x*/ printf("%d %d %d\n", rand_from(1,5), (i-1)*width+j, i*width+j-1);/*x*/ edgenum+=4; } } } if(edgenum != edgenumorg) printf("ERROR!!\n"); return 1; }