您的位置:首页 > 其它

矩阵连乘问题动态规划算法

2018-03-20 17:12 190 查看
#include"stdio.h"

int m[7][7],s[7][7];
int p[7];

void MatrixChain(int n, int *p, int m[7][7], int s[7][7])
{
int i, j, k, r, tmp;
for(i=1;i<=n;i++) m[i][i]=0;
for(r=2;r<=n;r++)
{
for(i=1;i<=n-r+1;i++)
{
j=i+r-1;
m[i][j]= m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j]=i;
for(k=i+1;k<j;k++)
{
tmp=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(tmp<m[i][j])
{
m[i][j]=tmp;
s[i][j]=k;
}
}
}
}
}

void Traceback(int i, int j, int s[7][7]){
if(i==j) return;
Traceback(i, s[i][j], s);
Traceback(s[i][j]+1, j, s);
printf("Multiply A%d,%d",i,s[i][j]);
printf("and A%d,%d\n",s[i][j]+1,j);
}

int main()
{
p[0]=30;p[1]=35;p[2]=15;p[3]=5;p[4]=10;p[5]=20;p[6]=25;
MatrixChain(6, p, m, s);
Traceback(1,6,s);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: