2017-07-27 49 views
-1
int main() 
{ 
    FILE *wg = NULL; 
    wg = fopen("wangdata.txt","w"); 
    if(wg == NULL) 
    { 
     printf("Error in opening file wg!\n"); 
    } 

    int vertices = 100, edges = 400, i; // 20,50:(100,50) 
    int strings = 160; 
    int v1, v2,j; 
    double t=0.0; 
    double dt=0.1; 
    double b[strings]; 
    double x[vertices], x1[vertices]; 
    double x2[vertices]; 
    unifRand(x,x1,x2); 

    struct Edge * adjacencyList[vertices + 1]; 
    // Size is made (vertices + 1) to use the 
    // array as 1-indexed, for simplicity 

    // initialize array: 
    for (i = 0; i <= vertices; ++i) { 
     adjacencyList[i] = NULL; 
    } 

    for (i = 0; i <= edges; ++i) { 
     //scanf(%d%d", &v1, &v2); 
     v1 = rand()%100; 
     v2 = rand()%100; 

     // Adding edge v1 --> v2 
     // Add edge from v1 --> v2 
     if(v1 != v2) 
     adjacencyList[v1] = addEdge(adjacencyList[v1], v2); 

     // Adding edge v2 --> v1 
     // Remove this if you want a Directed Graph 
     adjacencyList[v2] = addEdge(adjacencyList[v2], v1); 
    } 

    // Printing Adjacency List 
    printf("\nAdjacency List -\n\n"); 
    for(j=0; j<strings; j++){ 

     for (i = 0; i <= vertices; ++i) { 
      printf("adjacencyList[%d] -> ", i); 
      struct Edge * traverse = adjacencyList[i]; 
      while (traverse != NULL) 
      { 
       b[j] = j/vertices; 
       fprintf(wg,"%d %d \t\t%0.3lf\t\t\t%0.1lf\t%0.6lf\t\n", i, traverse->vertex, (-log(1-x[i])*(traverse->vertex)),b[j],x[i]); 
       printf("%d -> ", traverse->vertex); 
       traverse = traverse->next; 
      } 
      printf("NULL\n"); 
     } 
    } 

    return 0; 
    fclose(wg); 
    wg = NULL; 
} 

上述for循环中的主要功能,仅在输出文件中打印01,作为b[j]。在打印j时,它会打印所有j的值,但该循环不适用于b[j]。我不知道哪里出了问题?我将b[j]定义为总顶点归一化的字符串数(图论中的网络大小)。为什么for循环对特定值不起作用?

+0

顶点在哪里申报?请添加更多你的代码。 –

+5

你确定*关于循环条件'我<=顶点'? –

+0

你是不是指'b [j] = j/i;'? – CinCout

回答

1

您将int除以int。这将产生一个int值。由于j将始终低于vertices,你会得到0

尝试

b[j] = (double)j/(double)vertices; 
+0

未能注意到微不足道的问题。它现在有效。谢谢 – Kevin

1

j从0到159,由100向零除由于整数除法轮,这给0或1

如果你想有一个非舍double结果,投下数的一个或两个double分裂之前:

b[j] = j/(double) vertices;