2013-05-11 59 views
0

我需要一個函數,可以根據矩陣的x軸對稱性。如何根據矩陣的x軸對稱性設置

輸入(矩陣[i] [j]):

1 2 3 
4 5 6 
7 8 9 

輸出(矩陣[i] [j]):

7 8 9 
4 5 6 
1 2 3 

我怎樣才能做到這一點上相同的基質? 我應該如何編寫反函數?

void inverse(.......) 
{ 
.. 
.. 
.. 
} 

int main(){ 
int **matrix, i, j, k, row, column; 
cout << "Row and column:" ; 
cin >> row >> column; 
matrix = new int*[row]; 
for (i=0; i<row; ++i){ 
    matrix[i] = new int[column]; 
} 
cout << "input elements of matrix: " << endl; 
for(i=0; i<row; i++){ 
     for (j=0; j<column; j++){ 
      cin >> *(*(matrix+i)+j); 
     } 
} 

inverse (........); 

for(i=0; i<row; i++){ 
     for (j=0; j<column; j++){ 
      cout << *(*(matrix+i)+j); 
     } 
     cout << endl; 
} 
return 0; 
} 
+2

這可能不是一個好主意,調用該函數'inverse'。 – 2013-05-11 11:27:08

+0

是的,這可能是,但我會檢查if語句調用函數。例如: cout <<你想要矩陣的逆矩陣嗎? ; – sarikaya 2013-05-11 11:39:59

+0

如果(是) 調用反函數 其他 不叫 – sarikaya 2013-05-11 11:40:27

回答

0

在這種特殊情況下,可以修改循環向後打印矩陣:

for(i = 0; i < row; i++) { 

- >

for(i = row - 1; i >= 0; i--) { 

但如果要真正地做一些數據,我的建議是重構此代碼以使用std::vector

std::vector<std::vector<int> > matrix(numberOfRows, std::vector<int>(numberOfColumns)); 
// You can use std::vector<std::valarray<int> > matrix; alternatively. 

你會那麼只需通過使用STL功能翻轉:

std::reverse(matrix.begin(), matrix.end()); 

編輯:
好吧,如果你不想使用std::vector暫時與此特定的情況下,你會做的是這樣的:

void flipMatrix(int** matrix, int rows, int columns) { 
    int middle = rows/2; // I expect it to truncate for an odd number of rows. 

    // Temporary row for swapping 
    int* tempRow; 

    for (int i = 0; i < middle; i++) { 
     // swap rows 
     tempRow = matrix[i]; 
     matrix[i] = matrix[rows - i - 1]; 
     matrix[rows - i - 1] = tempRow; 
    } 
} 
+0

我不知道的std ::向量,我不能:( – sarikaya 2013-05-11 11:55:30

+0

會這樣? 無效逆(INT行,詮釋列){ STD :: vector > matrix(row); for(std :: vector > :: iterator i = matrix.begin(); i!= matrix.end(); + + i){ matrix.push_back(std :: vector (column)); std :: reverse(matrix.begin(),matrix.end()); }} – sarikaya 2013-05-11 12:02:57

+0

不是。只有初始化矩陣 – 2013-05-11 12:03:58