【问题标题】:C: Boolean Matrix and ArraysC:布尔矩阵和数组
【发布时间】:2014-12-23 16:24:42
【问题描述】:

我正在学习 C,并尝试从输入中的一对数字(图形的边)打印一个布尔矩阵 (5 x 5)。如果矩阵中元素的位置有对应的边,则为“1”,否则为“0”。例如:

我输入:1 2, 1 4, 2 4, 2 3, 3 5

我希望它位于 (1,2) 和 (2,1) 位置; (1,4) 和 (4,1); (2,4) 和 (4,2); (2,3) 和 (3,2), (3,5) 和 (5,3) 它打印 1,但其他所有打印 0。

这是我能写的,但实际上并没有用:

(我研究过多维数组,但我看不出它们是否对这种情况有用。)

int i, j;

int array1[5], array2[5];

for (i = 0; i < 5; ++i)
    {
    printf("Insert the edges %d of the graph\n", i);
    scanf("%d %d", &array1[i], &array2[i]);
    } 

printf("{");
for (i = 0; i < 5; ++i)
printf("(%d,%d)", array1[i], array2[i]);
printf("}\n");

for (i = 0; i < 5; ++i) {
    for (j = 0; j < 5; ++j) 
        if (((array1[i] == i+1) && (array2[i] == j+1)) || ((array1[i] == j+1) && (array2[i] == i+1))) printf("%d ", 1); 
        else printf("%d ", 0); 
        printf("\n");  }

我应该看到什么(使用这些示例输入):

http://imageshack.com/a/img537/9986/jx5roa.png

我得到了什么:

http://imageshack.com/a/img537/6341/kroVQK.png

感谢您的宝贵时间!

【问题讨论】:

  • 你能发布一些你迄今为止尝试过的示例输出吗?也就是说,你能澄清一下它在哪些方面不起作用吗?

标签: c matrix


【解决方案1】:

您应该创建二维数组。最初用全零填充它,然后当用户输入边缘时,您将这些元素更改为 1。

#define SIZE 5
int array[SIZE][SIZE];
int i, j;
// Initialize array to 0
for (i = 0; i < SIZE; i++) {
    for (j = 0; j < SIZE; j++) {
        array[i][j] = 0;
    }
}

// Get edges from user
for (i = 0; i < SIZE; i++) {
    int e1, e2;
    printf("Insert the edges %d of the graph\n", i);
    scanf("%d %d", &e1, &e2);
    // Set them to 1
    array[e1-1][e2-1] = 1;
    array[e2-1][e1-1] = 1;
}

// Display the array
for (i = 0; i < SIZE; i++) {
    for (j = 0; j < SIZE; j++) {
        printf("%d ", array[i][j]);
    }
    printf("\n");
}

【讨论】:

  • 谢谢!我刚刚修改:array[e1][e2] = 1; array[e2][e1] = 1; 到:array[e1-1][e2-1] = 1; array[e2-1][e1-1] = 1; 以便输入中的“1”代表数组的位置“0”,正如我想要的那样。现在进展顺利。
  • 我在你原来的程序里看到了,后来忘了自己做。