本人在写矩阵的时候,定义了一个 matrix,结果对于给定的输入
3 2
0 2 0
0 0 2
0 0 0
0 0
它的输出是随机的。
请问这是肿么回事?
谢谢!
#include <bits/stdc++.h>
using namespace std;
int n,k;
template<typename T>
struct matrix{
int r,c;
T **M;
matrix(int r,int c):r(r),c(c){
M=new int*[r+1];
for(int i=1;i<=r;++i) M[i]=new int[c+1];
for(int i=1;i<=r;++i) for(int j=1;j<=c;++j) M[i][j]=0;
}
~matrix(){delete M;}
T& operator()(int i,int j){
return M[i][j];
}
matrix operator+(matrix &rhs)const{
if(r!=rhs.r||c!=rhs.c) throw "Er! + dnt hv sam siz.";
matrix ans(r,c);
for(int i=1;i<=r;++i) for(int j=1;j<=c;++j) ans(i,j)=M[i][j]+rhs(i,j);
return ans;
}
matrix operator-(matrix &rhs)const{
if(r!=rhs.r||c!=rhs.c) throw "Er! - dnt hv sam siz.";
matrix ans(r,c);
for(int i=1;i<=r;++i) for(int j=1;j<=c;++j) ans(i,j)=M[i][j]-rhs(i,j);
return ans;
}
matrix operator*(matrix &rhs)const{
if(c!=rhs.r) throw "Er! * a.c!=b.r.";
matrix ans(r,rhs.c);
for(int i=1;i<=r;++i) for(int j=1;j<=rhs.c;++j){
ans(i,j)=0;
for(int k=1;k<=c;++k) ans(i,j)=ans(i,j)+M[i][k]*rhs(k,j);
}
return ans;
}
};
void solve(){
matrix<int> A(n,n),I(n,n),K(n,n);
for(int i=1;i<=n;++i) I(i,i)=1;
for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) cin>>A(i,j);
K=A;
for(int l=1;l<k;++l){
K=K+I;
K=A*K;
}
for(int i=1;i<=n;++i,cout<<endl) for(int j=1;j<=n;++j) cout<<K(i,j)<<" ";
}
int main(){
while(cin>>n>>k&&(n||k)) solve();
return 0;
}