我的矩阵换位算法只适用于某些维度



基本上,我已经写了一些代码来转置矩阵,对于一些输入,它可以工作,对于一些不可以,我不知道我在哪里犯了错误。

这是代码

#include <stdio.h>
int main() {
int WIDTH, HEIGHT, i, j;
int matrix[100][100];
do {
printf("Enter height and width: ");
scanf("%d %d", &HEIGHT, &WIDTH);
if ((WIDTH > 100 || HEIGHT > 100) || (WIDTH < 1) || (HEIGHT < 1))
printf("Dimensions incorrect!n");
else
break;
} while (1);
int vel = WIDTH * HEIGHT;
printf("Enter elements: ");
for (i = 0; i < HEIGHT; i++)
for (j = 0; j < WIDTH; j++)
scanf("%d", &matrix[i][j]);
int temp;
for (i = 0; i < HEIGHT; i++) {
for (j = i; j < WIDTH; j++) {
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
printf("Transposed matrix: n");
for (i = 0; i < WIDTH; i++) {
for (j = 0; j < HEIGHT; j++)
printf("%5d", matrix[i][j]);
printf("n");
}
return 0;
}

我对维度3 2,元素{1,2,3,4,5,6}的输出:(示例1(

1    3    0
2    4    0

想要输出:(示例1(

1    3    5
2    4    6

我对维度5 1,元素{1,2,3,4,5}的输出:(示例2(

1    0    0    0    0

想要输出:(示例2(

1    2    3    4     5

考虑5,1的情况,因此:

for (i = 0; i < 5; i++) {
for (j = i; j < 1; j++) { // for j>=1 the condition will always fail
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}

内部循环的主体将仅针对[0][0]运行。

只有当HEIGHT<=WIDTH。如果是HEIGHT>=WIDTH,您应该改为:

for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < i; j++) {
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}

换言之,如果矩阵是不对称的,则需要将掉期数量建立在其较长的一侧。

如果HEIGHT==WIDTH,则可以执行任一操作。

最新更新