矩阵连乘--单步跟踪发现问题
单步跟踪发现p[3]=0不知道怎么回事,望高手指点啊
我的程序:
#include<iostream.h>
#define N 6
void MatrixChain(int *p,int n,int m[N][N],int s[N][N]);
//int Traceback(int i,int j,int s[N][N]);
int main()
{
int p[]={30,35,15,5,10,20,25};
// for(int k=0;k<7;k++)
// cout<<p[k]<<" ";
int n=6,i=0,j=0;
int m[6][6];
int s[6][6];
MatrixChain(p,n,m,s);
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
if(i<=j)
cout<<m[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
// int i=1,j=6;
// Traceback(i,j,s);
return 0;
}
void MatrixChain(int *p,int n,int m[N][N],int s[N][N])
{
for(int i=1;i<=n;i++)m[i][i]=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;
}
}
}
}
/* for(i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
if(i<=j)
cout<<m[i][j]<<" ";
}
cout<<endl;
}*/
}
/*int Traceback(int i,int j,int s[N][N])
{
if(i==j)return -1;//cout<<"no-op"<<endl;
Traceback(i,s[i][j],s);
Traceback(s[i][i]+1,j,s);
cout<<"Multiply A"<<i<<","<<s[i][j];
cout<<"and A"<<(s[i][j]+1)<<","<<j<<endl;
return 0;
}*/