Yêu cầu:
Hoán vị 2 cột trên ma trận
Thuật toán:
Duyệt theo hàng và thực hiện đổi chỗ 2 cột tương ứng
Code:
/*************** Permute 2 columns in matrix **************** *Author: vncoding *Date : 13/05/2019 ************************************************************/ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <memory.h> #define N 100 #define M 100 void ImportData(int[][M], int, int, char*); void PrintMatrix(int[][M], int, int, char); void PermuteCol(int[][M], int, int, int, int); void main() { int aRow, aCol; int A[N][M]; int col1, col2; printf("\nNumber of row: "); scanf("%d", &aRow); printf("\nNumber of column: "); scanf("%d", &aCol); ImportData(A, aRow, aCol, "A"); PrintMatrix(A, aRow, aCol, 'A'); printf("\nNumber of column1 (0 ~ %d): ", aCol - 1); scanf("%d", &col1); printf("\nNumber of column2 (0 ~ %d): ", aCol - 1); scanf("%d", &col2); PermuteCol(A, aRow, aCol, col1, col2); printf("\nPermuted matrix\n"); PrintMatrix(A, aRow, aCol, 'P'); getch(); } /************************************************************* * Function : PermuteCol() * Parameter : A[][M]: input matrix (I/O) * aRow : row number of matrix A (I) * aCol : column number of matrix A (I) * col1 : column 1 (I) * col2 : column 2 (I) * Return : void * * Description : Permute 2 rows in matrix *************************************************************/ void PermuteCol(int A[][M], int aRow, int aCol, int col1, int col2) { int iARow, iACol; int tmp; if (col1 < 0 || col1 >= aCol || col2 < 0 || col2 >= aCol || col1 == col2) { return; } // Sweep according to row for (iARow = 0; iARow < aRow; iARow++) { tmp = A[iARow][col1]; A[iARow][col1] = A[iARow][col2]; A[iARow][col2] = tmp; } } /************************************************************* * Function : ImportData() * Parameter : A[][M]: input matrix (I) nRow : row number (I) nCol : column number(I) nameMatrix: matrix name (I) * Return : void * Description : Import matrix data *************************************************************/ void ImportData(int Matrix[][M], int nRow, int nCol, char* nameMatrix) { int iRow, iCol; for (iRow = 0; iRow < nRow; iRow++) for (iCol = 0; iCol < nCol; iCol++) { printf("\n%s[%d][%d] = ", nameMatrix, iRow, iCol); scanf("%d", &Matrix[iRow][iCol]); } } /************************************************************* * Function : PrintMatrix() * Parameter : Matrix: input matrix (I) nRow : row number (I) nCol : column number(I) name : name of matrix (I) * Return : void * Description : Display matrix data *************************************************************/ void PrintMatrix(int Matrix[][M], int nRow, int nCol, char name) { int iRow, iCol; printf("\n%c = ", name); for (iRow = 0; iRow < nRow; iRow++) { printf("\n"); for (iCol = 0; iCol < nCol; iCol++) { printf("\t%d\t", Matrix[iRow][iCol]); } } }
Kết quả:
Number of row: 4 Number of column: 4 A[0][0] = 1 A[0][1] = 2 A[0][2] = 3 A[0][3] = 4 A[1][0] = 5 A[1][1] = 6 A[1][2] = 7 A[1][3] = 8 A[2][0] = 9 A[2][1] = 10 A[2][2] = 11 A[2][3] = 12 A[3][0] = 13 A[3][1] = 14 A[3][2] = 15 A[3][3] = 16 A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Number of column1 (0 ~ 3): 1 Number of column2 (0 ~ 3): 2 Permuted matrix P = 1 3 2 4 5 7 6 8 9 11 10 12 13 15 14 16
Leave a Reply
You must be logged in to post a comment.