JD 1474:矩陣冪

OJ題目:click here~~

題目分析:經典題目,矩陣快速冪。

typedef vector<int> vec ;
typedef vector<vec> mat ;
int n ;
mat mul(mat &A , mat &B){
    mat C(n , vec(n)) ;
    for(int i = 0;i < n;i++)
        for(int j = 0;j < n;j++)
        for(int k = 0;k < n;k++)
            C[i][j] += A[i][k] * B[k][j] ;
    return C ;
}

mat pow(mat A , int k){
    mat B(n , vec(n)) ;
    for(int i = 0;i < n;i++)
        B[i][i] = 1 ;
    while(k > 0){
        if(k&1) B = mul(B , A) ;
        A = mul(A , A) ;
        k >>= 1 ;
    }
    return B ;
}

int main(){
     int k , T ;
     cin >> T ;
     while(T--){
        scanf("%d%d",&n,&k) ;
        mat A(n , vec(n)) ;
        for(int i = 0;i < n;i++)
        for(int j = 0 ;j < n;j++){
            scanf("%d",&A[i][j]) ;
        }
        A = pow(A, k) ;
        for(int i = 0;i < n;i++)
        for(int j = 0;j < n;j++){
            j == n-1 ? printf("%d\n",A[i][j]) : printf("%d ",A[i][j]) ;
        }
     }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章