C 无向图邻接矩阵的生成

C 无向图邻接矩阵的生成,c,C,无向图的邻接矩阵本质上是对称的,矩阵中a->B或B->a的权重应对称表示。我已经实现了下面的代码来生成图的随机邻接矩阵,但它没有考虑这个属性。有人能建议我修改一下使它工作吗 #define INFTY INT_MAX int **edge; int N=5; edge= malloc(N * sizeof(int *)); for (i = 0; i < N; i++) {

无向图的邻接矩阵本质上是对称的,矩阵中a->B或B->a的权重应对称表示。我已经实现了下面的代码来生成图的随机邻接矩阵,但它没有考虑这个属性。有人能建议我修改一下使它工作吗

        #define INFTY INT_MAX
        int **edge;
        int N=5;

        edge= malloc(N * sizeof(int *));
        for (i = 0; i < N; i++)
        {
            edge[i] = malloc(N * sizeof(int));
        }

        srand(0);
        for(i = 0; i < N; i++)
        {
            for(j = 0; j < N; j++)
            {
                if(i == j){
                    edge[i][j] = 0;
                }

                else{
                    int r = rand() % 10;
                    edge[i][j] = (r == 5)? INFTY: r;
                }

            }
        }
#定义INFTY INT_MAX
整数**边;
int N=5;
边缘=malloc(N*sizeof(int*);
对于(i=0;i
观察无向图有对称的邻接矩阵:

然后简单地随机分配矩阵的上三角形,并使下三角形匹配:

#define INFTY INT_MAX
int **edge;
int N=5;

edge= malloc(N * sizeof(int *));
for (i = 0; i < N; i++)
{
    edge[i] = malloc(N * sizeof(int));
}

srand(0);
for(i = 0; i < N; i++)
{
    for(j = i; j < N; j++)
    {
        if(i == j){
            edge[i][j] = 0;
        }

        else{
            int r = rand() % 10;
            int val = (r == 5)? INFTY: r;
            edge[i][j] = val;
            edge[j][i] = val;  // If there is edge from i to j, then there
                               // must be edge from j to i
        }

    }
}
#定义INFTY INT_MAX
整数**边;
int N=5;
边缘=malloc(N*sizeof(int*);
对于(i=0;i
随机化不起作用?或者什么?是的,但我不知道谁来做矩阵对称是的,没错。我没有注意到这一点。非常感谢你。