动态规划:矩阵连乘问题编程实现(c++)

本文详细介绍了如何在C++中实现矩阵连乘问题,包括如何正确传递二维数组作为函数参数,以及完整的矩阵乘法函数实现。通过具体代码示例,展示了从输入两个矩阵到输出乘法结果的全过程。

矩阵连乘问题比较麻烦的地方就是对二维数组形参的赋值,例如形参int **a,它不能由二维数组a[][]直接传参a来表示,必须通过指针进行中转,例如

void subfun(int n, char **subargs)  
{  
    int i;   
    for (i = 0; i < n; i++) {  
        printf("subargs[%d] = %s\n", i, subargs[i]);  
    }  
}  
  
void main()  
{  
    char *a[3];  
    char args[][5] = {"abc", "def", "ghi"};  
    a[0] = args[0];  //equals with a[0] = &args[0][0];  
    a[1] = args[1];  
    a[2] = args[2];  
    subfun(3, a);  //若此处为subfun(3, args);则会编译出错  
}  

然后才能传参,矩阵连乘问题编程实现如下(运行已通过)

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	void matrixMultiply(int **a,int **b,int **c,int ra,int ca,int rb,int cb);
	int a[4][5],b[5][4],c[4][4];
	int *A[4],*B[5],*C[4];
	cout<<"请输入第一个矩阵:"<<endl;
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<5;j++)
		{
			cin>>a[i][j];
		}
		A[i]=a[i];
	}
	cout<<"请输入第二个矩阵:"<<endl;
	for(int m=0;m<5;m++)
	{
		for(int n=0;n<4;n++)
		{
			cin>>b[m][n];
		}
		B[m]=b[m];
	}
	C[0]=c[0];
	C[1]=c[1];
	C[2]=c[2];
	C[3]=c[3];

	matrixMultiply(A,B,C,4,5,5,4);
	return 0;
}

void matrixMultiply(int **a,int **b,int **c,int ra,int ca,int rb,int cb)
{
	if(ca!=rb) cout<<"矩阵不可乘"<<endl;
	for(int i=0;i<ra;i++)
	{
		for(int j=0;j<cb;j++)
		{
			int sum = a[i][0]*b[0][j];
			for(int k=1;k<ca;k++)
				sum+=a[i][k]*b[k][j];
			c[i][j]=sum;
		}
	}
	for(int m=0;m<ra;m++)
	{
		for(int n=0;n<cb;n++)
		{
			cout<<setw(5)<<c[m][n]<<" ";
		}
		cout<<endl;
	}
}

运行结果如下:

希望能解决你的问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值