
矩阵连乘问题,为什么运行不了?
一运行就说XXX.exe已停止工作#include<iostream>usingnamespacestd;voidMatrixChain(int*p,intn,int**...
一运行就说XXX.exe已停止工作
#include<iostream>
using namespace std;
void MatrixChain(int *p,int n,int **m,int **s){//m[i][j]表示第i个矩阵乘到第j个矩阵需要做的乘法次数,s[i][j]
//表示在第i个矩阵和第j个矩阵间加括号隔开
for(int i=1;i<=n;i++)m[i][i]=0;
for(int r=2;r<=n;r++)//倒数第R行
for(int i=1;i<=n+1-r;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[i+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 i,int j,int **s){
if(i==j){cout<<"A"<<i;return;}
cout<<"(";
Traceback(i,s[i][j],s);
Traceback(s[i][j]+1,j,s);
cout<<")";
}
int main(){
int p[7]={30,35,15,5,10,20,25};//存矩阵的行列信息的
int **m=new int *[6];
int **s=new int *[6];
MatrixChain(p,6,m,s);
Traceback(1,6,s);
}
有木有大神帮忙看看 感激不尽!!! 展开
#include<iostream>
using namespace std;
void MatrixChain(int *p,int n,int **m,int **s){//m[i][j]表示第i个矩阵乘到第j个矩阵需要做的乘法次数,s[i][j]
//表示在第i个矩阵和第j个矩阵间加括号隔开
for(int i=1;i<=n;i++)m[i][i]=0;
for(int r=2;r<=n;r++)//倒数第R行
for(int i=1;i<=n+1-r;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[i+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 i,int j,int **s){
if(i==j){cout<<"A"<<i;return;}
cout<<"(";
Traceback(i,s[i][j],s);
Traceback(s[i][j]+1,j,s);
cout<<")";
}
int main(){
int p[7]={30,35,15,5,10,20,25};//存矩阵的行列信息的
int **m=new int *[6];
int **s=new int *[6];
MatrixChain(p,6,m,s);
Traceback(1,6,s);
}
有木有大神帮忙看看 感激不尽!!! 展开
2个回答
展开全部
不是所有矩阵都可以互相相乘 !大多数矩阵 不可以 相乘。
A 矩阵 X B 矩阵, 只有 当 A 的列数 等于 B的 行数 才可以 乘,
得出的 C 矩阵 行数 同 A 的行数, 列数 同 B的列数。
A X B 可以时,B X A 往往不可以,除非是方阵。
你要 矩阵连乘,有一个依次乘的顺序,必需保证 每次乘时 新的前矩阵列数 等于 新的 后矩阵 行数。否则 乘法 不成立。
A 矩阵 X B 矩阵, 只有 当 A 的列数 等于 B的 行数 才可以 乘,
得出的 C 矩阵 行数 同 A 的行数, 列数 同 B的列数。
A X B 可以时,B X A 往往不可以,除非是方阵。
你要 矩阵连乘,有一个依次乘的顺序,必需保证 每次乘时 新的前矩阵列数 等于 新的 后矩阵 行数。否则 乘法 不成立。
追问
先谢谢啊 不过我输入的矩阵是可以连乘的呃。。。
追答
那你就要看你乘法运算本身是否写对,写对了,连续调用就是了。
各矩阵的行和列是多少,我没看出来。全是6x6?
这里给你一个矩阵乘法函数,你可以直接调用。
已知 a,b 计算出 c.
void matrix2(int *a,int *b, int *c, int a_row, int b_col, int b_row)
{
int i,j,k;
int a_col,c_row,c_col;
a_col=b_row; c_row=a_row; c_col=b_col;
for(j=0;j<c_row;j++){
for(i=0;i<c_col;i++){
c[j*c_col+i]=0;
for(k=0;k<a_col;k++) c[j*c_col+i]+= a[j*a_col+k] * b[k*b_col+i];
};
};
}
你可以循环调用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询