gen3.cpp
Go to the documentation of this file.
1 // Copyright (C) 2000, International Business Machines
2 // Corporation and others. All Rights Reserved.
3 /* This gnerator generates $Q_{maxw,dens}$ :
4 */
5 
6 #include <cstdio>
7 #include <cstdlib>
8 #include <algorithm>
9 
10 int
11 main(int argc, char* argv[])
12 {
13  if (argc != 5) {
14  printf("Usage: gen3 <nodenum> <density> <maxweight> <seed>\n");
15  return -1;
16  }
17 
18  int i, j, k;
19 
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]);
24 
25  srand48(seed);
26 
27  const int maxedgenum = (num*(num-1)) / 2;
28  int * pick = new int[maxedgenum];
29  k = 0;
30  for (i = 0; i < num; ++i) {
31  for (j = i + 1; j < num; ++j) {
32  pick[k++] = (i << 16) + j;
33  }
34  }
35 
36  random_shuffle(pick, pick + maxedgenum);
37  const int edgenum = static_cast<int>(maxedgenum * dens);
38 
39  printf("%i %i\n", num + 1, num + edgenum);
40 
41  double *matrix = new double[num * num];
42  for (i = 0; i < num; ++i)
43  matrix[i*num+i] = (2*maxw+1)*drand48() - maxw;
44 
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;
49  }
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;
54  }
55 
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;
63  }
64 
65  for (i = 0; i < num; ++i) {
66  printf("%3i %3i %i\n", 0, i+1, static_cast<int>(matrix[i*num+i]));
67  }
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]));
72  }
73  }
74  }
75 
76  return 0;
77 }
int main(int argc, char *argv[])
Definition: BB_tm.cpp:32
static char * j
Definition: OSdtoa.cpp:3622
void fint fint * k