반응형
행렬 제곱을 구현해보는 문제였습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <iostream> using namespace std; long long a[6][6],ans[6][6],c[6][6],n,b; void cal(long long a[6][6], long long b[6][6]) { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { c[i][j] = 0; for (int k = 1; k <= n; k++) { c[i][j] += a[i][k] * b[k][j]; } c[i][j] %= 1000; } for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) a[i][j] = c[i][j]; } int main() { cin >> n >> b; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cin >> a[i][j]; } ans[i][i] = 1; } while (b > 0) { if (b % 2 == 1)//지수가 홀수면 { cal(ans, a); } cal(a, a); b /= 2; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) cout << ans[i][j] << ' '; cout << '\n'; } } | cs |
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ)코딩 3058번 : 짝수를 찾아라 (0) | 2017.02.26 |
---|---|
(C++) - 백준(BOJ)코딩 1075번 : 나누기 답 (0) | 2017.02.26 |
(C++) - 백준(BOJ) 1629번 : 곱셈 답 (0) | 2017.02.19 |
(C++) - 백준(BOJ) 1991번 : 트리 순회 (0) | 2017.02.11 |
(C++) - 백준(BOJ) 2711번 : 오타맨 고창영 (0) | 2016.12.09 |