【问题标题】:How to set according to the x-axis Symmetry of Matrix如何根据矩阵的x轴对称设置
【发布时间】:2013-05-05 23:37:17
【问题描述】:

我需要一个可以根据矩阵的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;
}

【问题讨论】:

  • 调用该函数inverse 可能不是一个好主意。
  • 是的,可能是这样,但我要检查是否使用 if 语句调用函数。例如: cout
  • 如果(是)调用反函数,否则不调用

标签: c++ function matrix dynamic-memory-allocation


【解决方案1】:

在这种特殊情况下,您可以修改循环以向后打印矩阵:

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;
    }
}

【讨论】:

  • 我不知道std::vector,我也不知道:(
  • 是这样的吗? void inverse(int row, int column){ std::vector<:vector> > matrix(row); for (std::vector<:vector> >::iterator i = matrix.begin(); i != matrix.end(); ++i) { matrix.push_back(std::vector(列)); std::reverse(matrix.begin(), matrix.end()); }}
  • 没有。我在那里展示的代码仅用于初始化矩阵。
  • 我已更新答案以包含不依赖 std::vector 的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多