自己用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语言定义数组不是应该后面是常量吗?怎么我这个程序,用常量错,用变量反而对呢?
展开
 我来答
灬丝竹青衣丨丶
2011-10-14
知道答主
回答量:8
采纳率:0%
帮助的人:12.1万
展开全部
m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];这句话调用到m[n][n],但是实际上只能调用到m[n-1][n-1]。(因为从0开始的嘛。不过有时候也能用,就是用了下一维的第0个)
所以要写int m[7][7](要不就8,8)。
至于int m[n][n]为什么会对,我猜是直接用了内存的其他部分吧。。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式