矩阵连乘C语言递归实现

该博客介绍了一个递归算法,用于寻找并构造矩阵乘法的最优顺序,以达到最小化运算代价的目的。通过LookupChain函数计算最优值,并使用Traceback函数回溯得到最优解。博主给出了矩阵个数和各维数值的输入,然后展示最优值和最优解的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "stdio.h"
 int p[100],s[100][100],n;
 //计算最优值
 //递归实现! 
 int LookupChain(int i, int j)
{
      if (i == j) return 0;
       int u= LookupChain(i,i) + LookupChain(i+1,j) + p[i-1]*p[i]*p[j];
       s[i][j] = i;
       for (int k = i+1; k < j; k++) {
         int t = LookupChain(i,k) + LookupChain(k+1,j) + p[i-1]*p[k]*p[j];
         if (t < u) { u = t; s[i][j] = k;}
         }
       return u;
}
 //构造最优解
void Traceback(int i, int j, int s[100][100]){
		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(){
    printf("请输入矩阵个数:\n");
    scanf("%d",&n);
    printf("请输入矩阵各维数值:\n");
    for(int i=0;i<n+1;i++){
        scanf("%d",&p[i]);
    }
    printf("最优值为:%d\n",LookupChain(1,n));
	printf("最优解为:\n");
    Traceback(1,n,s);
    printf("\n");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值