我不确定如何正确地使我的两跳邻居。几乎是正确的,但是在我的输出中,我不想包含相同的顶点。对于我现在的输出,如果顶点0为0,则显示“顶点0:0 .....
我想跳过当前正在查看的顶点。

请帮助我,我的两跳密码有误吗?

这是我的代码:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#define M 20
#define N 20
int main()
 {
int i, j, x, a, b;
int G[20][20] = { { 0 } };
/*creaate random adjaceney matrix*/
printf("==================================================\n");
printf("Welcome to my Graph Processing tool!\n\n");

srand(time(NULL));
for (i = 0; i < M; i++) {
    for (j = 0; j < N; j++) {
        if (i == j) {
            G[i][j] = 0;
        }
        else {
            G[i][j] = rand() % 2;
            G[j][i] = G[i][j];
        }
    }
}
/*check whether the whole row equals to 0*/
for (j = 0; j < N; j++) {
    if (G[j] == 0) {
        x = rand() % 20 + 1;
        G[x][j] = G[j][x] = 1;
    }
    /*print the matrix G*/
    else
    {

        printf("The adjacency for graph G is\n");
        for (i = 0; i < M; i++) {
            for (j = 0; j < N; j++) {
                printf("%d ", G[i][j]);
            }
            printf("\n");
        }
    }
}

/*all one-hop neighbors*/
printf("\nList of one-hop neighbors:");
for (i = 0; i < M; i++) {
    printf("\nVertex %d: ", i);
    for (j = 0; j < N; j++) {
        if (G[i][j] == 1) {

            printf("%d ", j);
        }
    }
}
printf("\n===================================\n\n");


/*two-hop neighbors*/

    for (i = 0; i < M; i++) {
        printf("\nVertex %d: ", i);
        for (j = 0; j < N; j++) {
            if (G[i][j] == 0) {

                printf("%d ", j);
            }
        }
        }

}

printf("\n============================================\n");


system("pause");
return 0;
}


这是我的输出:

One hop
Two hop

最佳答案

这里有几点要注意。

用您的变量命名来更具描述性,这会使它更容易阅读。

M行,N-COLS,G图

遍历每一行时,将j初始化为0。这包括要忽略的顶点。

for (j = 1; j < N; j++)

08-25 05:53