11 main(
int argc,
char* argv[])
14 printf(
"Usage: gen3 <nodenum> <density> <maxweight> <seed>\n");
20 const int num = atoi(argv[1]);
21 const double dens = atof(argv[2]);
22 const int maxw = atoi(argv[3]);
23 const int seed = atoi(argv[4]);
27 const int maxedgenum = (num*(num-1)) / 2;
28 int * pick =
new int[maxedgenum];
30 for (i = 0; i < num; ++i) {
31 for (j = i + 1; j < num; ++
j) {
32 pick[k++] = (i << 16) + j;
36 random_shuffle(pick, pick + maxedgenum);
37 const int edgenum =
static_cast<int>(maxedgenum * dens);
39 printf(
"%i %i\n", num + 1, num + edgenum);
41 double *matrix =
new double[num * num];
42 for (i = 0; i < num; ++i)
43 matrix[i*num+i] = (2*maxw+1)*drand48() - maxw;
45 for (k = 0; k < edgenum; ++
k) {
46 const int i = pick[
k] >> 16;
47 const int j = pick[
k] & 0xffff;
48 matrix[i*num+
j] = matrix[j*num+i] = (2*maxw+1)*drand48() - maxw;
50 for (; k < edgenum; ++
k) {
51 const int i = pick[
k] >> 16;
52 const int j = pick[
k] & 0xffff;
53 matrix[i*num+
j] = matrix[j*num+i] = 0.0;
56 for (i = 0; i < num; ++i) {
57 double sum = 2 * matrix[i*num+i];
58 for (j = 0; j < i; ++
j)
59 sum += matrix[i*num+j];
60 for (j = i+1; j < num; ++
j)
61 sum += matrix[i*num+j];
62 matrix[i*num+i] = sum;
65 for (i = 0; i < num; ++i) {
66 printf(
"%3i %3i %i\n", 0, i+1, static_cast<int>(matrix[i*num+i]));
68 for (i = 0; i < num; ++i) {
69 for (j = i+1; j < num; ++
j) {
70 if (matrix[i*num+j] != 0.0) {
71 printf(
"%3i %3i %i\n", i+1,j+1, static_cast<int>(matrix[i*num+j]));
int main(int argc, char *argv[])