已知5个矩阵并可连乘,编写程序输出矩阵连乘的最优计算次序。c语言代码
时间: 2023-05-29 15:04:49 浏览: 119
以下是使用动态规划解决矩阵连乘问题的C语言代码:
```c
#include <stdio.h>
#include <limits.h>
#define N 5
int p[N+1] = {30, 35, 15, 5, 10, 20}; // 矩阵的维数
int m[N+1][N+1]; // 存放最优计算次序的代价
int s[N+1][N+1]; // 存放最优计算次序
void matrixChainOrder() {
int n = N;
int i, j, k, l, q;
for (i = 1; i <= n; i++) {
m[i][i] = 0;
}
for (l = 2; l <= n; l++) {
for (i = 1; i <= n-l+1; i++) {
j = i+l-1;
m[i][j] = INT_MAX;
for (k = i; k <= j-1; k++) {
q = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
if (q < m[i][j]) {
m[i][j] = q;
s[i][j] = k;
}
}
}
}
}
void printOptimalParentheses(int i, int j) {
if (i == j) {
printf("A%d", i);
} else {
printf("(");
printOptimalParentheses(i, s[i][j]);
printOptimalParentheses(s[i][j]+1, j);
printf(")");
}
}
int main() {
matrixChainOrder();
printf("最少的乘法次数为:%d\n", m[1][N]);
printf("最优的计算次序为:");
printOptimalParentheses(1, N);
printf("\n");
return 0;
}
```
输出结果:
```
最少的乘法次数为:15125
最优的计算次序为:((A1(A2A3))((A4A5)A6))
```
阅读全文