思路:模拟,当然,k次幂可以用快速幂优化,这里懒了
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> mul(int n, vector<vector<int>>& a, vector<vector<int>>& b) {
vector<vector<int>> tmp(n, vector<int>(n, 0));
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
int cur = 0;
for(int k = 0; k < n; k++) {
cur += a[i][k] * b[k][j];
}
tmp[i][j] = cur;
}
}
return tmp;
}
int main() {
int n, k;
cin >> n >> k;
vector<vector<int>> g(n, vector<int>(n));
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
cin >> g[i][j];
}
}
vector<vector<int>> res = g;
while(--k) {
res = mul(n, g, res);
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
cout << res[i][j] << " ";
}
cout << endl;
}
return 0;
}
思路:
顺时针旋转[i][j]-->[c+j-d][d+b+c-i-1]
逆时针旋转[i][j]-->[d+b+c-j-1][d+i-c]
#include<iostream>
using namespace std;
int pre[6][6];
int pro[6][6];
int main(){
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cin>>pre[i][j];
}
}
int a,b,c,d;
cin>>a>>b>>c>>d;
int n=b;
if(a==1){
for(int i=c;i<=c+b-1;i++){
for(int j=d;j<=d+b-1;j++){
pro[c+j-d][d+b+c-i-1]=pre[i][j];
}
}
for(int i=c;i<=c+b-1;i++){
for(int j=d;j<=d+b-1;j++){
pre[i][j]=pro[i][j];
}
}
}else if(a==2){
for(int i=c;i<=c+b-1;i++){
for(int j=d;j<=d+b-1;j++){
pro[d+b+c-j-1][i+d-c]=pre[i][j];
}
}
for(int i=c;i<=c+b-1;i++){
for(int j=d;j<=d+b-1;j++){
pre[i][j]=pro[i][j];
}
}
}
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cout<<pre[i][j]<<" ";
}
cout<<endl;
}
return 0;
}