zoukankan      html  css  js  c++  java
  • 【模板】(旧)矩阵模板

    矩阵模板

    坚持oop!

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #define LL long long
    using namespace std;
    
    #define MATRIXSIZE (10)
    struct MATRIX {
    
        LL lineSize,listSize; //  ÁÐ  ÐÐ
        int table[MATRIXSIZE][MATRIXSIZE];
    
        MATRIX() {
    
            lineSize=listSize=1;
    
            memset(table,0,sizeof(table));
    
        }
    
        MATRIX(const MATRIX &aMat) {
    
            lineSize=aMat.lineSize;
            listSize=aMat.listSize;
    
            for(int i=1; i<=lineSize; i++)
                for(int j=1; j<=listSize; j++)
                    table[i][j]=aMat.table[i][j];
    
        }
    
        void Read () {
    
            cin>>lineSize>>listSize;
    
            for(int i=1; i<=lineSize; i++)
                for(int j=1; j<=listSize; j++)
                    cin>>table[i][j];
    
        }
    
        void ReadOnlyTable (int tlineSize,int tlistSize) {
    
            lineSize=tlineSize;
            listSize=tlistSize;
    
            for(int i=1; i<=lineSize; i++)
                for(int j=1; j<=listSize; j++)
                    cin>>table[i][j];
    
        }
    
        void Print () {
    
            for(int i=1; i<=lineSize; i++) {
    
                for(int j=1; j<=listSize; j++)
                    cout<<table[i][j]<<" ";
                cout<<endl;
    
            }
    
        }
    
        void Mod (LL mod) {
    
            for(int i=1; i<=lineSize; i++)
                for(int j=1; j<=listSize; j++)
                    table[i][j]%=mod;
    
        }
    
    };
    
    MATRIX operator + (MATRIX firstMat,MATRIX secondMat) {
    
        MATRIX newMat;
    
        newMat.lineSize=max(firstMat.lineSize,secondMat.lineSize);
        newMat.listSize=max(firstMat.listSize,secondMat.listSize);
    
        for(int i=1; i<=newMat.lineSize; i++)
            for(int j=1; j<=newMat.listSize; j++)
                newMat.table[i][j]=firstMat.table[i][j]+secondMat.table[i][j];
    
        return newMat;
    
    }
    
    MATRIX operator + (MATRIX aMat,LL num) {
    
        MATRIX newMat=aMat;
    
        for(int i=1; i<=newMat.lineSize; i++)
            for(int j=1; j<=newMat.listSize; j++)
                newMat.table[i][j]=aMat.table[i][j]+num;
    
        return newMat;
    
    }
    
    // copy
    MATRIX operator - (MATRIX firstMat,MATRIX secondMat) {
    
        MATRIX newMat;
    
        newMat.lineSize=max(firstMat.lineSize,secondMat.lineSize);
        newMat.listSize=max(firstMat.listSize,secondMat.listSize);
    
        for(int i=1; i<=newMat.lineSize; i++)
            for(int j=1; j<=newMat.listSize; j++)
                newMat.table[i][j]=firstMat.table[i][j]-secondMat.table[i][j];
    
        return newMat;
    
    }
    
    MATRIX operator - (MATRIX aMat,LL num) {
    
        MATRIX newMat=aMat;
    
        for(int i=1; i<=newMat.lineSize; i++)
            for(int j=1; j<=newMat.listSize; j++)
                newMat.table[i][j]=aMat.table[i][j]-num;
    
        return newMat;
    
    }
    
    MATRIX operator * (MATRIX firstMat,MATRIX secondMat) {
    
        MATRIX newMat;
    
        if (firstMat.listSize!=secondMat.lineSize) return newMat;
    
        newMat.lineSize=firstMat.lineSize;
        newMat.listSize=secondMat.listSize;
    
        for(int i=1; i<=newMat.lineSize; i++)
            for(int j=1; j<=newMat.listSize; j++)
                for(int o=1; o<=firstMat.listSize; o++)
                    newMat.table[i][j]+=firstMat.table[i][o]*secondMat.table[o][j];
    
      return newMat;  
    
    }
    
    MATRIX operator * (MATRIX aMat,LL num) {
    
        MATRIX newMat=aMat;
    
        for(int i=1; i<=newMat.lineSize; i++)
            for(int j=1; j<=newMat.listSize; j++)
                newMat.table[i][j]=aMat.table[i][j]*num;
    
        return newMat;
    
    }
    
    MATRIX Matrix_BuildIdentity (MATRIX aMat) {
    
        MATRIX newMat=aMat;
    
        newMat.lineSize=aMat.lineSize;
        newMat.listSize=aMat.listSize;
    
        for(int i=1; i<=newMat.lineSize; i++)
            for(int j=1; j<=newMat.listSize; j++)
                if (i==j) newMat.table[i][j]=1;
                else newMat.table[i][j]=0;
    
        return newMat;
    
    }
    
    MATRIX Matrix_QuickPower (MATRIX aMat,LL k) {
    
        MATRIX newMat=aMat,ansMat=Matrix_BuildIdentity(aMat);
    
        while (k!=0) {
    
            if (k&1==1) ansMat=ansMat*newMat;
            newMat=newMat*newMat;
            k>>=1;
    
        }
    
        return ansMat;
    
    }
    
    int main () { return 0; }
  • 相关阅读:
    课后作业
    大道至简第六章读后感
    Ljava.lang.Object;@ba8a1dc
    课后作业
    大道至简第五章读后感
    课后作业加密
    动手动脑
    大道至简第四章读后感
    NEU 解题报告索引
    Aizu 解题报告索引
  • 原文地址:https://www.cnblogs.com/Ztraveler/p/7170678.html
Copyright © 2011-2022 走看看