矩阵乘法的板子

记一篇矩阵乘法的板子用:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int dir[8][2]={{1,0},{0,1},{1,1},{1,-1},{-1,1},{-1,-1},{0,-1},{-1,0}};
#define pi acos(-1)
#define ls rt<<1
#define rs rt<<1|1
#define me0(s) memset(s,0,sizeof(s))
#define me1(s) memset(s,1,sizeof(s))
#define mef(s) memset(s,-1,sizeof(s))
#define meinf(s) memset(s,inf,sizeof(s))
#define llinf 1e18
#define inf 1e9
const int N=105;
inline int read() {
    char c=getchar(); int x=0, f=1;
    while(c<'0'|c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
    return x*f;
}
struct Matrix{
    int n,m;//长度
    ull a[N][N];
    Matrix(int n,int m):n(n),m(m){}
    void init(){me0(a);};  //初始化矩阵
    Matrix operator* (const Matrix B) const{
        Matrix C(n,B.m);
        C.init();
        for(int i=0;i<n;i++)
            for(int j=0;j<B.m;j++)
                for(int k=0;k<m;k++)
                    C.a[i][j]+=a[i][k]*B.a[k][j];
        return C;
    }
    void print(){
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++)
                cout<<a[i][j]<<" ";
            cout<<endl;
        }
    }
};
int main(int argc, char * argv[]) {
    ios::sync_with_stdio(false);
    int n1,m1,n2,m2;
    n1=read(),m1=read();
    Matrix A(n1,m1);
    for(int i=0;i<n1;i++)
        for(int j=0;j<m1;j++)
            A.a[i][j]=read();
    n2=read(),m2=read();
    Matrix B(n2,m2);
    for(int i=0;i<n2;i++)
        for(int j=0;j<m2;j++)
            B.a[i][j]=read();
    Matrix C=A*B;
    C.print();
    return 0;
}
原文地址:https://www.cnblogs.com/wushengyang/p/11498911.html