矩阵相关算法
1. 两个矩阵相乘
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100;
int g1[N][N];
int g2[N][N];
int re[N][N];
int main()
{
int a, b, c, d;
printf("请输入第一个矩阵行列数\n");
scanf("%d%d", &a, &b);
printf("请输入第一个矩阵行列数\n");
scanf("%d%d", &c, &d);
if (b != c) cout << "输入错误" << endl;
printf("请输入第一个矩阵");
for (int i = 0; i < a; i ++) {
for (int j = 0; j < b; j ++) {
scanf("%d", &g1[i][j]);
}
}
for (int i = 0; i < a; i ++) {
for (int j = 0; j < b; j ++) {
printf("%d ",g1[i][j]);
}
printf("\n");
}
printf("请输入第二个矩阵\n");
for (int i = 0; i < c; i ++) {
for (int j = 0; j < d; j ++) {
scanf("%d", &g2[i][j]);
}
}
for (int i = 0; i < c; i ++) {
for (int j = 0; j < d; j ++) {
printf("%d ",g2[i][j]);
}
printf("\n");
}
for (int i = 0; i < a; i ++) {
for (int j = 0; j < d; j ++) {
for (int k = 0; k < b; k ++) {
re[i][j] += g1[i][k] * g2[k][j];
}
}
}
printf("相乘的结果为:\n");
for (int i = 0; i < a; i ++) {
for (int j = 0; j < d; j ++) {
printf("%d ",re[i][j] % 26);
}
printf("\n");
}
return 0;
}
2.矩阵的行列式
按行展开,递归求解
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100;
int n; //矩阵的阶数
int arr[N][N];
int bak[N][N]; //比arr低一阶的矩阵
int value; //行列式的值
void display(int arr[N][N], int n); //输出矩阵的每一个值
int det(int arr[N][N], int n); //求出行列式的值
int main()
{
printf("请输入矩阵的阶数:\n");
scanf("%d", &n);
printf("请输入矩阵的每一个元素值:\n");
for (int i = 0; i < n; i ++) {
for (int j = 0; j < n; j ++) {
scanf("%d", &arr[i][j]);
}
}
display(arr, n);
for (int i = 0; i < n; i ++) { //按第一行展开
for (int j = 1; j < n; j ++) {
for (int c = 0, k = 0; k < n; k ++) {
if (k == i) continue;
bak[j - 1][c ++] = arr[j][k];
}
}
// 第一个子矩阵求出来了
value = det(bak, n - 1);
printf("第%d个子矩阵为:\n", i + 1);
display(bak, n - 1);
printf("第%d个子矩阵的值为:%d\n", i + 1, det(bak, n - 1));
}
printf("矩阵的值为:%d\n", det(arr, n));
return 0;
}
int det(int arr[N][N], int n)
{
int bak[N][N];
int sum = 0;
if (n == 1) return arr[0][0]; //递归出口
for (int i = 0; i < n; i ++) {
for (int j = 1; j < n; j ++) {
for (int c = 0, k = 0; k < n; k ++) {
if (k == i) continue;
bak[j - 1][c ++] = arr[j][k];
}
}
sum += (i % 2 == 0 ? 1 : -1) * arr[0][i] * det(bak, n - 1);
}
return sum;
}
void display(int arr[N][N], int n)
{
for (int i = 0; i < n; i ++) {
for (int j = 0; j < n; j ++) {
printf("%3d ",arr[i][j]);
}
printf("\n");
}
}