图像变换
题目描述
位图bitmap,也叫做点阵图,栅格图像,像素图。如上图所示,是由n*m个点组成,每个点显示一种颜色就形成了图形,最小单位是像素。一个点的颜色一般用一个整数表示,因此一幅点阵图我们常常用一个n*m的矩阵保存,矩阵的元素值代表该点的颜色。
给定一个n行m列的图像各像素点的颜色值,对该图像有4种操作: 1)顺时针旋转90度;2)逆时针旋转90度;3)水平翻转;4)垂直翻转。对其有一系列操作,输出经过一系列操作后新图像各点的颜色值
输入格式
第一行 三个整数n、m、p分别表示行数、列数、操作次数(1<=n<=1600;1<=m<=1200;1<=p<=1000)
第2至第n+1行,每行m个整数,每个整数用一个空格隔开
第n+2行,有p个大写字母_(A 表示顺时针旋转90度 ;B表示逆时针旋转90度;C表示水平翻转;D表示垂直翻转)_表示操作的种类,每个字母由一个空格隔开。
输出格式
n行,每行m个整数,每个整数由一个空格隔开
输入输出样例
输入样例
3 3 1
1 2 3
4 5 6
7 8 9
A
输出样例
7 4 1
8 5 2
9 6 3
#include<bits/stdc++.h>
using namespace std;
int n,m,p;
int a[1600][1200];
char b[1000];
int c[1600][1200];
int main()
{
cin>>n>>m>>p;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int k=1;k<=p;k++){
cin>>b[k];
}
for(int k=1;k<=p;k++){
if(b[k]=='A'){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
c[j][m+1-i]=a[i][j];
}
}
}
if(b[k]=='B'){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
c[n-j+1][i]=a[i][j];
}
}
}
if(b[k]=='C'){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
c[i][m-j+1]=a[i][j];
}
}
}
if(b[k]=='D'){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
c[n-i+1][j]=a[i][j];
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<c[i][j]<<" ";
}
cout<<endl;
}
return 0;
}