64,651
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <iomanip>
using namespace std;
void MatrixChain(int *p,int n,int **m,int **s)
{
for (int ia=1;ia <=n;ia++)
m[ia][ia] = 0;
for (int r=2;r <=n;r++)
for (int i=1;i <=n-r+1;i++) {
int j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j]=i;
for (int k=i+1;k <j;k++) {
int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if (t <m[i][j]) {
m[i][j]=t;
s[i][j]=k;
}
}
}
}
void Traceback(int ib,int j,int **s)
{
if (ib==j)
return;
Traceback(ib,s[ib][j],s);
Traceback(s[ib][j]+1,j,s);
cout <<"Multiply A" <<ib <<"," <<s[ib][j];
cout <<"and A" <<(s[ib][j]+1) <<"," <<j <<endl;
}
int main(void)
{
cout <<"输入你要的矩阵个数n" <<endl;
int n;
cin>>n;
int *p;//保存你要的矩阵行列
p=new int[n+1];
for (int ic=0;ic <=n;ic++) {
char ca;
cin>>ca;
if (ca != 0)
p[ic]=static_cast <int>(ca);
else
break;
}
int **s,**m;
s=new int *[n+1];
m=new int *[n+1];
for (int a=0;a <=n;a++) {
s[a]=new int [n+1];
m[a]=new int [n+1];
}
MatrixChain(p,n,m,s);
for (int ic=1;ic <=n;ic++) {
for (int id=ic+1;id <=n;id++) {
cout <<m[ic][id] <<setw(8);
}
cout <<endl;
}
cout <<m[1][n] <<endl;
//Traceback(1,n,s);
delete []p;
for (int b=0;b <=n;b++) {
delete []s[b];
delete []m[b];
}
delete []s;
delete []m;
}