分享

连乘矩阵

 wokoo 2010-11-08
#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()
{

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多