struct mat{int m[N][N];//将A.m[i][j] 改成 A[i][j] 这种格式int* operator [] (size_t i) {return m[i];}const int* operator [] (size_t i) const {return m[i];}mat() {memset(m,0,sizeof m);}//初始化矩阵mat operator * (const mat& b) const {//矩阵乘法mat res;for(int i=0;i<N;i++)for(int k=0;k<N;k++){if(!m[i][k]) continue;const int a=m[i][k];for(int j=0;j<N;j++) res[i][j]=res[i][j]+a*b[k][j];} return res;}mat operator + (const mat& b) const {//矩阵加法mat res;for(int i=0;i<N;i++)for(int j=0;j<N;j++)res[i][j]=m[i][j]+b[i][j];return res;}mat operator ^ (int b) const {//矩阵快速幂mat a=(*this);mat res; res.init();while(b){if(b&1) res=res*a;a=a*a;b>>=1;}return res;}mat T(){//矩阵转置mat res;for(int i=0;i<N;i++)for(int j=0;j<N;j++)res[i][j]=m[j][i];return res;}void init(){//单位矩阵for(int i=0;i<N;i++) for(int j=0;j<N;j++)if(i==j) m[i][j]=1;else m[i][j]=0;}void write(){for(int i=0;i<N;i++){for(int j=0;j<N;j++) cout<<m[i][j]<<" ";cout<<"\n";}}
};
矩阵模板
本文来自博客园,作者:_AzureSky,转载请注明原文链接:https://www.cnblogs.com/-AzureSky-/p/19098359