我试图转置矩阵,但在某个时刻失败了。我找不到我犯错误的地方。首先,我创建一个矩阵作为锯齿状数组。我初始化它。交换每个项目,但它保持不变。transpoz功能部分改变了元件,但在操作结束时,它保持不变
#include<iostream>
#include<iomanip>
#include<string>
#include<limits>
#include<vector>
using namespace std;
void init_matrix(int** source)
{
int count = 1;
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
source[i][j]=count; count++;
}
}
}
void matrix_transpoz(int** source)
{
int temp;
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
temp = source[i][j];
source[i][j] = source[j][i];
source[j][i] = temp;
cout << source[i][j] << "t";
}cout << endl;
}cout << endl;
}
void print_matrix(int** source)
{
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
cout << source[i][j] << "t";
}cout << endl;
}
}
int main(int argc, char* argv[])
{
int** arr;
int count = 1;
arr = new int* [5];
for (int i = 0; i < 5; ++i)
{
arr[i] = new int[5];
}
init_matrix(arr);
print_matrix(arr); cout << endl;
matrix_transpoz(arr);
print_matrix(arr); cout << endl;
return 0;
}
如果将同一对数据交换两次,则在最后得到初始矩阵。只需使用
for (int j = i+1; j < 5; ++j)`
以避免交换两次相同的数据。
输出:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
代码:
#include<iostream>
#include<iomanip>
#include<string>
#include<limits>
#include<vector>
using namespace std;
void init_matrix(int** source)
{
int count = 1;
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
source[i][j]=count; count++;
}
}
}
void matrix_transpoz(int** source)
{
int temp;
for (int i = 0; i < 5; ++i)
{
for (int j = i+1; j < 5; ++j)
{
temp = source[i][j];
source[i][j] = source[j][i];
source[j][i] = temp;
}
}
}
void print_matrix(int** source)
{
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
cout << source[i][j] << "t";
}
cout << endl;
}
}
int main(int argc, char* argv[])
{
int** arr;
int count = 1;
arr = new int* [5];
for (int i = 0; i < 5; ++i)
{
arr[i] = new int[5];
}
init_matrix(arr);
print_matrix(arr);
cout << endl;
matrix_transpoz(arr);
print_matrix(arr);
cout << endl;
return 0;
}```