C语言编写一个二维矩阵只通过与二维矩阵上为零的点互换从而得到一个给定的二维数组的代码
时间: 2024-02-13 19:01:24 浏览: 69
下面是一个示例代码,可以通过与二维矩阵上为零的点互换来重构一个给定的二维数组:
```c
#include <stdio.h>
void printMatrix(int matrix[][3], int rows, int cols);
void swapRows(int matrix[][3], int row1, int row2);
void swapColumns(int matrix[][3], int col1, int col2);
int main() {
int matrix[3][3] = { {1, 2, 3}, {4, 0, 6}, {7, 8, 9} };
int rows = 3, cols = 3;
printf("Original matrix:\n");
printMatrix(matrix, rows, cols);
// Find the row and column with a zero
int zeroRow = -1, zeroCol = -1;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (matrix[i][j] == 0) {
zeroRow = i;
zeroCol = j;
break;
}
}
if (zeroRow != -1 && zeroCol != -1) {
break;
}
}
// Swap rows and columns
for (int i = 0; i < rows; i++) {
if (matrix[i][zeroCol] == 0 && i != zeroRow) {
swapRows(matrix, i, zeroRow);
}
}
for (int j = 0; j < cols; j++) {
if (matrix[zeroRow][j] == 0 && j != zeroCol) {
swapColumns(matrix, j, zeroCol);
}
}
printf("Reconstructed matrix:\n");
printMatrix(matrix, rows, cols);
return 0;
}
void printMatrix(int matrix[][3], int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
void swapRows(int matrix[][3], int row1, int row2) {
for (int j = 0; j < 3; j++) {
int temp = matrix[row1][j];
matrix[row1][j] = matrix[row2][j];
matrix[row2][j] = temp;
}
}
void swapColumns(int matrix[][3], int col1, int col2) {
for (int i = 0; i < 3; i++) {
int temp = matrix[i][col1];
matrix[i][col1] = matrix[i][col2];
matrix[i][col2] = temp;
}
}
```
这个程序首先输出原始的二维矩阵,然后找到其中一个为零的点,然后交换行和列,使其变为一个合法的矩阵。最后输出重构后的矩阵。在这个示例中,我们使用了一个3x3的矩阵。如果您需要处理不同大小的矩阵,可以相应地更改代码中的行和列参数。
阅读全文