您的位置:首页 > 其它

矩阵连乘1

2015-10-11 17:24 190 查看
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#define N 100

int p
; //存储矩阵维数,矩阵Ai的维数为p[i-1]*p[i]
int m

;  //m[i][j]为最优值,即计算矩阵A[i:j]所需的最少数乘次数
int s

;  //确定A[i:j]的最优次序中断开的位置k

int MartixChain(int n) //n为矩阵个数
{
int i;
for(i=1; i<=n; i++)
m[i][i] = 0;  //单一矩阵,无需计算
int r,  k;
for(r=2; r<=n; r++) //自底向上依次计算规模为2、3..n的子问题
{
for(i=1; i<=n-r+1; i++) //考察n-r+1个规模为r的子问题
{
int j = i+r-1;  //子问题左端点为i, 右断点为j, 规模为r
m[i][j] = m[i][i] + m[i+1][j] + p[i-1]*p[i]*p[j];  //初始最优解
s[i][j] = i;
for(k=i+1; k<j; k++)  //依次考察不同断点
{
int temp = m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(temp<m[i][j])  //递推比较
{
m[i][j] = temp; //更新最优解
s[i][j] = k;
}
}
}
}
return m[1]
;
}

int main()
{
int n;
printf("输入矩阵个数:");
scanf("%d", &n);
int i;
printf("输入每个矩阵的维数:");
for(i=0; i<=n; i++)
{
scanf("%d", &p[i]);
}
int min = MartixChain(n);
printf("最少乘次数为:%d\n", min);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: