我一直在搜索这个论坛几个小时,试图找到我的问题的答案,阅读手册页,似乎看不出我在做什么有什么问题。
这就是发生的事情。如果两个对象之间的距离足够小,我有一个程序循环并向(图)邻接矩阵添加条目。如果它们不够小,不能添加到邻接矩阵中,如果它们不是太大,它应该将条目的坐标添加到坐标对列表中,称为" possible_edgelist。 #34;
我的问题是" possible_edgelist"不会接受我赋予它的值(i和j到它的条目0和1)。但是,正在执行赋值任一侧的两个命令。我将在代码之后粘贴一些示例输出:
uncertain_edge_max = 4;
certain_edge_max = 3.2;
printmatrix(shelldistmtx, shellsize, shellsize); //this is being generated correctly.
max_num_of_edges = shellsize*(shellsize-1)/2;
possible_edgelist=(int**)malloc(max_num_of_edges* sizeof(int*));
for(i=0; i<max_num_of_edges; i++)
{
possible_edgelist[i] = (int*)malloc(2 * sizeof(int));
}
poss_edge_num = 0;
for(i=0; i<shellsize; i++)
{
adjacency_matrix[i][i]=0;
for(j=i+1; j<shellsize; j++)
{
if (shelldistmtx[i][j]<=certain_edge_max) {
adjacency_matrix[i][j]= 1;
adjacency_matrix[j][i]= 1;
}
else
{
if(shelldistmtx[i][j] <= uncertain_edge_max)
{
printf("%d \t %d \t %d \t %lf \n", poss_edge_num, i, j, shelldistmtx[i][j]);
// ^this is being executed
//*****THESE TWO LINES ARE NOT BEING EXECUTED???*********
possible_edgelist[poss_edge_num][0]=i;
possible_edgelist[poss_edge_num][1]=j;
poss_edge_num=poss_edge_num + 1; //this is being executed
}
adjacency_matrix[i][j] = 0;
adjacency_matrix[j][i] = 0;
}
}
adjacency_matrix[i][shellsize] = 1;
adjacency_matrix[shellsize][i] = 1;
}
//troubleshooting output
for (i=0; i<poss_edge_num; i++)
{
printf("%d, %d \n", possible_edgelist[poss_edge_num][0], possible_edgelist[poss_edge_num][1]); //this outputs zeros and bizarre numbers.
}
现在,我得到了输出:
0.000000 3.535534 3.535534 4.960403 4.960403
3.535534 0.000000 5.000000 3.715589 3.715589
3.535534 5.000000 0.000000 3.715589 3.715589
4.960403 3.715589 3.715589 0.000000 3.400000
4.960403 3.715589 3.715589 3.400000 0.000000
0 0 1 3.535534
1 0 2 3.535534
2 1 3 3.715589
3 1 4 3.715589
4 2 3 3.715589
5 2 4 3.715589
6 3 4 3.400000
0, -1073741824
0, -1073741824
0, -1073741824
0, -1073741824
0, -1073741824
0, -1073741824
0, -1073741824
最后一组值应该是(0,1),(0,2),(1,3)等。我不知道为什么没有正确分配值,有人可以解释一下发生了什么这里?
我能想到的唯一一点是,这是在一个快速连续多次调用的函数中发生的,但是我一定要释放()这里的所有内容随着每个函数调用在返回之前发生变化,(和不会改变的事情,在功能之外被分配/释放)。
哦,是的,我也试过了calloc()。同样的问题,除了所有的0。
帮助!
答案 0 :(得分:1)
您的打印循环错误:
for (i=0; i<poss_edge_num; i++)
{
printf("%d, %d \n", possible_edgelist[i][0], possible_edgelist[i][1]);
}