自己用C语言写了一个动态规划求矩阵连乘。但是在定义数组有问题。请高手指点。。
#include<stdio.h>#include<string.h>#include<stdlib.h>intmain(){intp[]={30,35,15,5,10,...
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int p[]={30,35,15,5,10,20,25};
int n=6;
int m[6][6]; //最少相乘次数
int s[6][6]; //分割点K的位置
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; //r是跨度
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];
//printf("t=%d;,m[%d][%d]=%d\n",t,i,j,m[i][j]);
if(t<m[i][j])
{
m[i][j]=t;//printf("%d",m[i][j]);
s[i][j]=k;//printf("%d",s[i][j]);
}
//printf("m[%d][%d]==%d\n",i,j,m[i][j]);
//printf("s[%d][%d]==%d\n",i,j,s[i][j]);
}
printf("m[%d][%d]==%d\n",i,j,m[i][j]);
printf("s[%d][%d]==%d\n",i,j,s[i][j]);
}
}
system("pause");
}
代码如上,输出结果错误。
但是如果在定义数组时改为int m[n][n]; int s[n][n];
结果就对了,为什么啊????求指点。
C语言定义数组不是应该后面是常量吗?怎么我这个程序,用常量错,用变量反而对呢? 展开
#include<string.h>
#include<stdlib.h>
int main()
{
int p[]={30,35,15,5,10,20,25};
int n=6;
int m[6][6]; //最少相乘次数
int s[6][6]; //分割点K的位置
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; //r是跨度
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];
//printf("t=%d;,m[%d][%d]=%d\n",t,i,j,m[i][j]);
if(t<m[i][j])
{
m[i][j]=t;//printf("%d",m[i][j]);
s[i][j]=k;//printf("%d",s[i][j]);
}
//printf("m[%d][%d]==%d\n",i,j,m[i][j]);
//printf("s[%d][%d]==%d\n",i,j,s[i][j]);
}
printf("m[%d][%d]==%d\n",i,j,m[i][j]);
printf("s[%d][%d]==%d\n",i,j,s[i][j]);
}
}
system("pause");
}
代码如上,输出结果错误。
但是如果在定义数组时改为int m[n][n]; int s[n][n];
结果就对了,为什么啊????求指点。
C语言定义数组不是应该后面是常量吗?怎么我这个程序,用常量错,用变量反而对呢? 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询