📅  最后修改于: 2023-12-03 14:56:29.858000             🧑  作者: Mango
本文将介绍如何使用C++编写一个矩阵的对角线镜像程序。矩阵对角线镜像是指将矩阵沿主对角线(从左上角到右下角)翻转,即矩阵中的每个元素都与主对角线对称的元素位置上的元素交换。例如,对于以下矩阵:
1 2 3
4 5 6
7 8 9
经过对角线镜像后,变成:
1 4 7
2 5 8
3 6 9
对于一个n x n的矩阵,假设矩阵的元素为a[i][j],其中i和j均从0开始,且i和j的范围均为0到n-1。矩阵的对角线镜像可以通过以下代码来实现:
for(int i = 0; i < n; i++){
for(int j = i + 1; j < n; j++){
swap(a[i][j], a[j][i]);
}
}
for(int i = 0; i < n; i++){
for(int j = 0; j < n / 2; j++){
swap(a[i][j], a[i][n - j - 1]);
}
}
首先,第一个循环从矩阵的左上角开始,交换矩阵中位置为(i,j)和(j,i)的元素。这是矩阵对角线镜像的第一步。
然后,第二个循环从矩阵的第一行开始,将第j列和第n-j-1列的元素进行交换。此时,矩阵已经完成了对角线镜像。
以下是一个完整的矩阵对角线镜像的C++程序示例:
#include <iostream>
using namespace std;
void mirror(int **a, int n){
// 对角线镜像
for(int i = 0; i < n; i++){
for(int j = i + 1; j < n; j++){
swap(a[i][j], a[j][i]);
}
}
// 左右翻转
for(int i = 0; i < n; i++){
for(int j = 0; j < n / 2; j++){
swap(a[i][j], a[i][n - j - 1]);
}
}
}
int main(){
// 声明一个3x3的矩阵
int **a;
a = new int *[3];
for(int i = 0; i < 3; i++){
a[i] = new int[3];
}
// 给矩阵赋值
int cnt = 1;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
a[i][j] = cnt;
cnt++;
}
}
cout << "矩阵对角线镜像前:" << endl;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
cout << a[i][j] << " ";
}
cout << endl;
}
// 进行矩阵对角线镜像
mirror(a, 3);
cout << "矩阵对角线镜像后:" << endl;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
cout << a[i][j] << " ";
}
cout << endl;
}
// 释放矩阵内存
for(int i = 0; i < 3; i++){
delete[] a[i];
}
delete[] a;
return 0;
}
代码中,首先声明了一个3x3的矩阵a,并赋值为从1到9的连续整数。然后,通过调用mirror函数,对矩阵进行对角线镜像。最后,释放矩阵内存,程序运行完毕。