我正在学习C,并尝试在输入中从数组(图形的边缘)打印布尔矩阵(5 x 5)。如果矩阵中元素的位置具有相应的边缘,则为" 1"否则为" 0"。例如:
我输入:1 2 1,4 4,2 3,4 2,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
感谢您的时间!
答案 0 :(得分:2)
您应该创建二维数组。最初用全零填充它,然后当用户输入边时,将这些元素更改为一个。
#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");
}