题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2157
解题思路:矩阵快速幂
1 #include<iostream> 2 using namespace std; 3 4 int n; //n个点,对应nxn矩阵 5 6 struct Matrix{ 7 int a[20][20]; 8 }res; 9 10 Matrix multiply(Matrix x,Matrix y){ 11 Matrix temp; 12 for(int i=0;i<n;i++){ 13 for(int j=0;j<n;j++){ 14 temp.a[i][j]=0; 15 for(int k=0;k<n;k++) temp.a[i][j]+=x.a[i][k]*y.a[k][j]; 16 temp.a[i][j]%=1000; 17 } 18 } 19 return temp; 20 } 21 22 void calc(Matrix origin,int k){ 23 while(k){ 24 if(k&1) res=multiply(res,origin); 25 k>>=1; 26 origin=multiply(origin,origin); 27 } 28 } 29 30 int main(){ 31 int m,t,A,B,k,i,j; 32 Matrix origin; 33 while(cin>>n>>m,n||m){ 34 35 //构造对应的矩阵 36 for(i=0;i<n;i++){ 37 for(j=0;j<n;j++) origin.a[i][j]=0; 38 } 39 while(m--){ 40 cin>>i>>j; 41 origin.a[i][j]=1; 42 } 43 44 cin>>t; 45 while(t--){ 46 cin>>A>>B>>k; 47 48 //初始化res为单位矩阵 49 for(i=0;i<n;i++){ 50 for(j=0;j<n;j++) res.a[i][j]=0; 51 res.a[i][i]=1; 52 } 53 54 calc(origin,k); 55 cout<<res.a[A][B]<<endl; 56 } 57 } 58 return 0; 59 }