• 【模板】(旧)矩阵模板


    矩阵模板

    坚持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; }
  • 相关阅读:
    C# Net 合并int集合为字符串,如:输入1,2,3,4,8 输出1~4,8
    sql server 安装出现需要sqlncli.msi文件,错误为 microsoft sql server 2012 native client
    C# Form 实现桌面弹幕
    C# Net 去除图片白边
    SQL common keywords examples and tricks
    Excel formula and tricks
    HIghcharts cheatsheet
    CSS common keywords examples and tricks
    小白终于弄懂了:c#从async/await到Task再到Thread
    LeetCode 2: single-number II
  • 原文地址:https://www.cnblogs.com/Ztraveler/p/7170678.html
Copyright © 2020-2023  润新知