#include<iostream.h>
#include<iomanip.h> void MatrixChain(int *p,int n) { //动态分配二维数组 int **a,**s; a=new int* [n]; s=new int* [n]; for(int i=0;i<n+1;i++) {s[i]=new int[n];a[i]=new int[n];} //进行矩阵乘法 for(i=1;i<n+1;i++) a[i][i]=0; for(i=2;i<n+1;i++) for(int j=1;j<n-i+2;j++) { int r=j+i-1; a[j][r]=a[j+1][r]+p[j-1]*p[j]*p[r]; s[j][r]=j; for(int k=j+1;j<r;j++) { int temp=a[j][k]+a[k][r]+p[j-1]*p[k]*p[r]; if(temp<a[j][r]) {a[j][r]=temp;s[j][r]=k;} } } //输出最优的算法步骤 for(i=1;i<n+1;i++) { for(int j=1;j<n+1;j++) cout<<setw(8)<<a[i][j]; cout<<endl; } //最优的断开位置 for(i=1;i<n+1;i++) { for(int j=1;j<n+1;j++) cout<<setw(4)<<s[i][j]; cout<<endl; } //删除动态分配的空间 for(i=0;i<n+1;i++) { delete []a[i];delete []s[i]; } delete []p;delete []s; } void main() { } |
|