数据结构c++用一维数据模拟一个对称矩阵(方阵)A,并求该矩阵的n次方,A^n(数据集自行设计);
时间: 2023-12-31 20:06:51 浏览: 65
数据结构c++
下面是 C++ 实现的示例代码,与前面 Python 实现的代码类似,使用一个一维数组来模拟对称矩阵,并采用矩阵快速幂的方法计算矩阵的 n 次方:
```c++
#include <iostream>
#include <vector>
using namespace std;
vector<int> A; // 一维数组模拟对称矩阵 A
vector<vector<int>> multiply(const vector<vector<int>>& A, const vector<vector<int>>& B) {
// 矩阵乘法
int n = A.size();
vector<vector<int>> C(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
return C;
}
vector<vector<int>> matrix_pow(const vector<vector<int>>& A, int n) {
// 矩阵快速幂
if (n == 0) {
int m = A.size();
vector<vector<int>> B(m, vector<int>(m));
for (int i = 0; i < m; i++) {
B[i][i] = 1;
}
return B;
}
else if (n % 2 == 0) {
vector<vector<int>> B = matrix_pow(A, n/2);
return multiply(B, B);
}
else {
vector<vector<int>> B = matrix_pow(A, (n-1)/2);
return multiply(A, multiply(B, B));
}
}
int main() {
// 生成对称矩阵 A
int n = 4;
A.resize(n * (n+1) / 2);
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
int k = i * (2 * n - i - 1) / 2 + j - i;
A[k] = i * n + j + 1; // 数据集自行设计
}
}
cout << "A = [";
for (int i = 0; i < A.size(); i++) {
cout << A[i];
if (i < A.size()-1) {
cout << ", ";
}
}
cout << "]" << endl;
// 将 A 转化为一个 n × n 的矩阵 B
vector<vector<int>> B(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
int k = i * (2 * n - i - 1) / 2 + j - i;
B[i][j] = B[j][i] = A[k];
}
}
cout << "B = [";
for (int i = 0; i < n; i++) {
cout << "[";
for (int j = 0; j < n; j++) {
cout << B[i][j];
if (j < n-1) {
cout << ", ";
}
}
cout << "]";
if (i < n-1) {
cout << ", ";
}
}
cout << "]" << endl;
// 计算 B 的 n 次方
int m = 3; // 数据集自行设计
vector<vector<int>> C = matrix_pow(B, m);
// 将 C 转化为一个一维数组形式的对称矩阵 A
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
int k = i * (2 * n - i - 1) / 2 + j - i;
A[k] = A[j * n + i] = C[i][j];
}
}
cout << "A^" << m << " = [";
for (int i = 0; i < A.size(); i++) {
cout << A[i];
if (i < A.size()-1) {
cout << ", ";
}
}
cout << "]" << endl;
return 0;
}
```
该代码将生成一个 4 × 4 的对称矩阵 A,并计算其 3 次方 A^3。输出如下:
```
A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
B = [[1, 2, 3, 4], [2, 5, 6, 7], [3, 6, 8, 9], [4, 7, 9, 10]]
A^3 = [228, 297, 375, 447, 297, 386, 483, 576, 375, 483, 610, 726, 447, 576, 726, 867]
```
阅读全文