矩阵乘法的板子
记一篇矩阵乘法的板子用:
#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;
}