printf调试。 while循环执行,第一个for循环执行,第二个for循环不执行。
while (size > 0){
printf("in the while loop!\n");
VertexPointer current = graph[0];
int i;
for (i = 1; i < size; i++){
float dist = 0;
printf("in the first for loop for i = %d \n", i);
int j;
for(j = 0; j++; j < dimension){
printf("dist loop: %d\n", j);
printf("current: %f\n", (*current).loc[0]);
printf("unvisited: %f\n", (*graph[j]).loc[0]);
dist = dist + pow((*current).loc[0] + (*graph[j]).loc[0], 2);
printf("distance: %f", dist);
dist = sqrt(dist);
if (dist < (*graph[i]).key){
decreaseKey(graph, i, dist);
}
}
}
extractMin(graph, size);
size = size - 1;
mst_length = mst_length + (*current).key;
}
答案 0 :(得分:2)
你改变了条件和增量:
for(j = 0; j++; j < dimension)
所以循环测试j++
的值,并且由于postfix ++
运算符返回变量的 previous 值,它将递增,它将返回0(初始值) j
)的值在第一次迭代时因此永远不会循环。将其更改为
for(j = 0; j < dimension; j++)
如果打开警告,您应该收到一条消息,表明第三个表达式没有副作用(并且会被编译器优化掉)。
或者(停止:实际上不这样做):
将条件更改为++j
,使其成为(可能)永无止境的循环:
for(j = 0; ++j; j < dimension)
如果你很幸运(在这种情况下通常是这样),当j
到达MAX_INT
并且回绕到0时,循环将结束。但是标准并不能保证那,它可能是无止境的。