矩阵连乘问题

lq651659889 2009-10-17 08:40:55
#include<iostream>
#include<iomanip>
using namespace std;

void MatrixChain(int *p,int n,int **m,int **s)
{
for(int ia=1;ia<=n;ia++)
m[ia][ia] = 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;
}
}
}
}

void Traceback(int ib,int j,int **s)
{
if(ib==j)
return;
Traceback(ib,s[ib][j],s);
Traceback(s[ib][j]+1,j,s);
cout<<"Multiply A"<<ib<<","<<s[ib][j];
cout<<"and A"<<(s[ib][j]+1)<<","<<j<<endl;
}

void main(void)
{
cout<<"输入你要的矩阵个数n"<<endl;
int n;
cin>>n;
int *p;//保存你要的矩阵行列
p=new int[n+1];
for(int ic=0;ic<=n;ic++)
{
char ca;
cin>>ca;
if(ca != 0)
p[ic]=static_cast <int>(ca);
else
break;
}
int **s,**m;
s=new int *[n+1];
m=new int *[n+1];
for(int a=0;a<=n;a++)
{
s[a]=new int [n+1];
m[a]=new int [n+1];
}
MatrixChain(p,n,m,s);
for(int ic=1;ic<=n;ic++)
{
for(int id=ic+1;id<=n;id++)
{
cout<<m[ic][id]<<setw(8);
}
cout<<endl;
}
cout<<m[1][n]<<endl;
//Traceback(1,n,s);
delete []p;
for(int b=0;b<=n;b++)
{
delete []s[b];
delete []m[b];
}
delete []s;
delete []m;
}
...全文
360 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyinghawl 2009-10-19
  • 打赏
  • 举报
回复
楼主写的太好了,看不出所以然来
wanjingwei 2009-10-19
  • 打赏
  • 举报
回复
up
lq651659889 2009-10-19
  • 打赏
  • 举报
回复
问题是这程序在我机上跑除结果是错的想问错在哪里了?
lq651659889 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 thy38 的回复:]
写得不错
C/C++ code#include<iostream>
#include<iomanip>usingnamespace std;void MatrixChain(int*p,int n,int**m,int**s)
{for (int ia=1;ia<=n;ia++)
m[ia][ia]=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;
}
}
}
}void Traceback(int ib,int j,int**s)
{if (ib==j)return;
Traceback(ib,s[ib][j],s);
Traceback(s[ib][j]+1,j,s);
cout<<"Multiply A"<<ib<<","<<s[ib][j];
cout<<"and A"<<(s[ib][j]+1)<<","<<j<<endl;
}int main(void)
{
cout<<"输入你要的矩阵个数n"<<endl;int n;
cin>>n;int*p;//保存你要的矩阵行列 p=newint[n+1];for (int ic=0;ic<=n;ic++) {char ca;
cin>>ca;if (ca!=0)
p[ic]=static_cast<int>(ca);elsebreak;
}int**s,**m;
s=newint*[n+1];
m=newint*[n+1];for (int a=0;a<=n;a++) {
s[a]=newint [n+1];
m[a]=newint [n+1];
}
MatrixChain(p,n,m,s);for (int ic=1;ic<=n;ic++) {for (int id=ic+1;id<=n;id++) {
cout<<m[ic][id]<<setw(8);
}
cout<<endl;
}
cout<<m[1][n]<<endl;//Traceback(1,n,s); delete []p;for (int b=0;b<=n;b++) {
delete []s[b];
delete []m[b];
}
delete []s;
delete []m;
}
[/Quote]
大哥这你调试对了没咯,在我机上跑是错的我才来问的啊!教小弟下咯,小弟在献上50分
liyulun 2009-10-18
  • 打赏
  • 举报
回复
..........
myhder 2009-10-18
  • 打赏
  • 举报
回复
看着头晕
myself2004 2009-10-18
  • 打赏
  • 举报
回复
omg~~
thy38 2009-10-18
  • 打赏
  • 举报
回复
写得不错
#include <iostream>
#include <iomanip>
using namespace std;

void MatrixChain(int *p,int n,int **m,int **s)
{
for (int ia=1;ia <=n;ia++)
m[ia][ia] = 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;
}
}
}
}

void Traceback(int ib,int j,int **s)
{
if (ib==j)
return;
Traceback(ib,s[ib][j],s);
Traceback(s[ib][j]+1,j,s);
cout <<"Multiply A" <<ib <<"," <<s[ib][j];
cout <<"and A" <<(s[ib][j]+1) <<"," <<j <<endl;
}

int main(void)
{
cout <<"输入你要的矩阵个数n" <<endl;
int n;
cin>>n;
int *p;//保存你要的矩阵行列
p=new int[n+1];
for (int ic=0;ic <=n;ic++) {
char ca;
cin>>ca;
if (ca != 0)
p[ic]=static_cast <int>(ca);
else
break;
}
int **s,**m;
s=new int *[n+1];
m=new int *[n+1];
for (int a=0;a <=n;a++) {
s[a]=new int [n+1];
m[a]=new int [n+1];
}
MatrixChain(p,n,m,s);
for (int ic=1;ic <=n;ic++) {
for (int id=ic+1;id <=n;id++) {
cout <<m[ic][id] <<setw(8);
}
cout <<endl;
}
cout <<m[1][n] <<endl;
//Traceback(1,n,s);
delete []p;
for (int b=0;b <=n;b++) {
delete []s[b];
delete []m[b];
}
delete []s;
delete []m;
}
wanghao111 2009-10-18
  • 打赏
  • 举报
回复
你好,不清楚你要问什么
woods2001 2009-10-17
  • 打赏
  • 举报
回复
这样的帖子
一天能碰到好几回
whg01 2009-10-17
  • 打赏
  • 举报
回复
你的问题是什么?

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧