代码求助
  • 板块学术版
  • 楼主Alea
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/8/17 23:05
  • 上次更新2024/8/18 10:36:38
查看原帖
代码求助
322792
Alea楼主2024/8/17 23:05

本人在写矩阵的时候,定义了一个 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;
}
2024/8/17 23:05
加载中...