【发布时间】:2016-01-08 17:09:59
【问题描述】:
我想创建一个表示无向图的邻接矩阵(以实现 Dijkstra 算法)。我通过创建填充随机数的 N*N 矩阵开始我的代码。但是,它希望使图形不是完全连接的,因此矩阵必须包含 INFTY,表示任何节点对之间没有路径。因此,如何随机在矩阵生成过程中添加INFNTY值如下:
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>
#define INFTY 99 // Define Infinity as a macro
int main (int argc, char* argv[]) {
/* Local Variables */
int N = 40; // Number of Nodes
int SOURCE = 0; // Selected Source
int i,j;
/* Matrix Allocation for edges */
int *edge[N];
for (i = 0; i < N; i++){
edge[i] = malloc(N * sizeof(int));
}
/* Randomely fill the matrix with random integers from 0-10 */
srand(0);
for (i = 0; i < N; i++){
for (j = 0; j < N; j++){
if(i == j)
edge[i][j] = 0;
else
edge[i][j] = rand() % 10; // Can I do something here to insert INFTY randomly.
}
}
}
【问题讨论】:
-
路径使用负值或其他数据结构(列表列表)而不是矩阵
-
我想过,但你知道 Dijkstra 算法不能处理负值。
-
那又怎样?您不需要处理它们,但忽略它们。您也可以只使用一些定义的最大值(定义您自己的) - 这应该不是问题
-
发布的代码没有完全编译。编译时始终启用所有警告。 (对于 gcc,至少使用:
-Wall -Wextra -pedantic)然后修复警告。除其他问题外,srand() 函数的代码缺少#include <stdlib.h>。 main() 的两个参数未使用。建议:int main( void )变量“SOURCE”未使用。建议删除该变量。 -
在询问有关运行时问题的问题时,发布干净编译但仍然存在问题的代码。