题解 | #矩阵幂#
矩阵幂
https://www.nowcoder.com/practice/31e539ab08f949a8bece2a7503e9319a
#include <iostream> #include <vector> #include <fstream> using namespace std; vector<vector<int>> multiply(const vector<vector<int>>&m1 ,const vector<vector<int>>&m2); int main() { int n,k; while(cin>>n>>k) { vector<vector<int>> e(n,vector<int>(n,0)); vector<vector<int>> m0(n,vector<int>(n,0)); for(int i=0;i<n;++i) e[i][i]=1; for(int i=0;i<n;++i) { for(int j=0;j<n;++j) { cin>>m0[i][j]; } } while(k!=0) { if((k&1)==1) e=multiply(e,m0); k=k>>1; m0=multiply(m0,m0); } for(int i=0;i<n;++i) { for(int j=0;j<n;++j) { cout<<e[i][j]<<" "; } cout<<endl; } } return 0; } vector<vector<int>> multiply(const vector<vector<int>>&m1 ,const vector<vector<int>>&m2) { int nsize=m1.size(),temp; vector<vector<int>> ans(nsize,vector<int>(nsize,0)); for(int i=0;i<nsize;++i) { for(int j=0;j<nsize;++j) { temp=0; for(int k=0;k<nsize;++k) { temp+=m1[i][k]*m2[k][j]; } ans[i][j]=temp; } } return ans; }