zoukankan      html  css  js  c++  java
  • 一个矩阵的类与矩阵连乘模板

    我的模板

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int maxsize=32;
    
    struct Matrix
    {
        int element[maxsize][maxsize];
        int size;
        int modulo;
    
        void init_matrix(int _size,int _modulo)
        {
            size=_size;
            modulo=_modulo;
            for (int i=0; i<_size; i++)
                for (int j=0; j<_size; j++)
                    element[i][j]=0;
        }
    
        Matrix operator*(Matrix param)
        {
            Matrix product;
            product.init_matrix(size,modulo);
            for (int i=0; i<size; i++)
                for (int j=0; j<size; j++)
                    for (int k=0; k<size; k++)
                    {
                        product.element[i][j]+=element[i][k]*param.element[k][j];
                        product.element[i][j]%=modulo;
                    }
            return product;
        }
    
        Matrix power(int exp)
        {
            Matrix tmp = (*this) * (*this);
            if (exp==1) return *this;
            else if (exp & 1) return tmp.power(exp/2) * (*this);
            else return tmp.power(exp/2);
        }
    
    };




    改造自Matrix67大神博客

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int maxsize=32;
    
    class CMatrix{
        public:
            int element[maxsize][maxsize];
            void setSize(int _size);
            void setModulo(int _modulo);
            CMatrix operator*(CMatrix param);
            CMatrix power(int exp);
        private:
            int size;
            int modulo;
    };
    
    void CMatrix::setSize(int _size)
    {
        for (int i=0;i<_size;i++)
            for (int j=0;j<_size;j++)
                element[i][j]=0;
        size=_size;
    }
    
    void CMatrix::setModulo(int _modulo)
    {
        modulo = _modulo;
    }
    
    CMatrix CMatrix::operator*(CMatrix param)
    {
        CMatrix product;
        product.setSize(size);
        product.setModulo(modulo);
        for (int i=0;i<size;i++)
            for (int j=0;j<size;j++)
                for (int k=0;k<size;k++)
                {
                    product.element[i][j]+=element[i][k]*param.element[k][j];
                    product.element[i][j]%=modulo;
                }
        return product;
    }
    
    CMatrix CMatrix::power(int exp)
    {
        CMatrix tmp = (*this) * (*this);
        if (exp==1) return *this;
        else if (exp & 1) return tmp.power(exp/2) * (*this);
        else return tmp.power(exp/2);
    }
    






  • 相关阅读:
    leetcode 350. Intersection of Two Arrays II
    leetcode 278. First Bad Version
    leetcode 34. Find First and Last Position of Element in Sorted Array
    leetcode 54. Spiral Matrix
    leetcode 59. Spiral Matrix II
    leetcode 44. Wildcard Matching
    leetcode 10. Regular Expression Matching(正则表达式匹配)
    leetcode 174. Dungeon Game (地下城游戏)
    leetcode 36. Valid Sudoku
    Angular Elements
  • 原文地址:https://www.cnblogs.com/cyendra/p/3226289.html
Copyright © 2011-2022 走看看