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; }
  • 相关阅读:
    atitit.颜色查找 根据范围 图像处理 inRange
    Atitit 跨平台的系统截图解决方案
    Atitit java opencv 捕获视频
    路法Atiti
    Atitit 获取本机图像设备视频设备列表 设备检索列表解决方案
    Atitit 团队工具链体系打造提升团队效率的一些通用软件 attilax总结
    Atitit gui控件定位解决方案
    Atitit html5.1 新特性attilax总结
    Atitti 模板匹配 List matchTemplate(
    利用CRebar和CDialogBar编写可浮动的dialog类型的工具栏
  • 原文地址:https://www.cnblogs.com/Ztraveler/p/7170678.html
Copyright © 2011-2022 走看看