专栏首页数据结构与算法09:图像旋转翻转变换

09:图像旋转翻转变换

09:图像旋转翻转变换

总时间限制: 1000ms 内存限制: 65536kB描述

给定m行n列的图像各像素点灰度值,对其依次进行一系列操作后,求最终图像。

其中,可能的操作及对应字符有如下四种:

A:顺时针旋转90度;

B:逆时针旋转90度;

C:左右翻转;

D:上下翻转。

输入第一行包含两个正整数m和n,表示图像的行数和列数,中间用单个空格隔开。1 <= m <= 100, 1 <= n <= 100。 接下来m行,每行n个整数,表示图像中每个像素点的灰度值,相邻两个数之间用单个空格隔开。灰度值范围在0到255之间。 接下来一行,包含由A、B、C、D组成的字符串s,表示需要按顺序执行的操作序列。s的长度在1到100之间。输出m'行,每行包含n'个整数,为最终图像各像素点的灰度值。其中m'为最终图像的行数,n'为最终图像的列数。相邻两个整数之间用单个空格隔开。样例输入

2 3
10 0 10
100 100 10
AC

样例输出

10 100
0 100
10 10
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<queue>
 6 #include<vector>
 7 #include<algorithm>
 8 using namespace std;
 9 int n,m;
10 int c[1001][1001];
11 int b[1001][1001];
12 char zx[101];
13 void zh(char a)
14 {
15     if(a=='A')
16     {
17         for(int i=1;i<=n;i++)
18         {
19             for(int j=1;j<=m;j++)
20             {
21                 b[j][n-i+1]=c[i][j];
22             }
23         }
24     }//顺时针旋转90度
25     if(a=='B')
26     {
27         for(int i=1;i<=n;i++)
28         {
29             for(int j=1;j<=m;j++)
30             {
31                 b[m-j+1][i]=c[i][j];
32             }
33         }
34     }//逆时针旋转90度
35     if(a=='C')
36     {
37         for(int i=1;i<=n;i++)
38         {
39             for(int j=1;j<=m;j++)
40             {
41                 b[i][m-j+1]=c[i][j];
42             }
43         }
44     }//左右翻转
45     if(a=='D')
46     {
47         for(int i=1;i<=n;i++)
48         {
49             for(int j=1;j<=m;j++)
50             {
51                 b[n-i+1][j]=c[i][j];
52             }
53         }
54     }//上下翻转
55     memcpy(c,b,sizeof(c));
56     if(a=='A'||a=='B')swap(m,n);
57 }
58 int main()
59 {
60     cin>>n>>m;
61     for(int i=1;i<=n;i++)
62     {
63         for(int j=1;j<=m;j++)
64         {
65             cin>>c[i][j];
66         }
67     }
68     scanf("%s",&zx);
69     for(int i=0;i<strlen(zx);i++)
70     {
71         zh(zx[i]);
72     }
73     for(int i=1;i<=n;i++)
74     {
75         for(int j=1;j<=m;j++)
76         {
77             cout<<c[i][j]<<" ";
78         }
79         cout<<endl;
80     }
81     return 0;
82 } 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BZOJ2761: [JLOI2011]不重复数字(map)

    例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 6 5 4。

    attack
  • BZOJ 1188: [HNOI2007]分裂游戏(multi-nim)

    Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏。该游戏的规则试:共有n个瓶子,标号为0,1,2.....n-1,第i个瓶子中 装有p[i]颗巧...

    attack
  • cf1056B. Divide Candies(数论 剩余系)

    求满足\(i^2 + j^2 \% M = 0\)的数对\((i, j)\)的个数,\(1 \leqslant i, j \leqslant 10^9, M \...

    attack
  • 【LeetCode 204】关关的刷题日记39 Count Primes

    关关的刷题日记39–Leetcode 204. Count Primes 题目 Count the number of prime numbers less t...

    WZEARW
  • BUPT2017 wintertraining(15) #3 题解

    ​ 有n张牌,两人都可以从中拿出任意张,各自的得分为他们手中牌上的数字的异或和。求A的得分小于等于B的方案数。

    饶文津
  • 单调队列,单调栈总结

    最近几天接触了单调队列,还接触了单调栈,就总结一下。 其实单调队列,和单调栈都是差不多的数据类型,顾名思义就是在栈和队列上加上单调,单调递增或者单调递减。当...

    ShenduCC
  • 1023 组个最小数 (20 分)

    可爱见见
  • 【CodeForces706E】Working routine(二维链表)

    q次操作,每次把两个给定子矩阵交换,求最后的矩阵。(2 ≤ n, m ≤ 1000, 1 ≤ q ≤ 10 000)

    饶文津
  • java 优雅代码for循环 之性能调优

    大家在工作中,用到最多的就是for循环了,但是你知道如何写for循环可以提高系统的性能呢? 我从以下几个方面对如何写for循环给大家几个事例,希望可以帮到你们

    gfu
  • cf1056B. Divide Candies(数论 剩余系)

    求满足\(i^2 + j^2 \% M = 0\)的数对\((i, j)\)的个数,\(1 \leqslant i, j \leqslant 10^9, M \...

    attack

扫码关注云+社区

领取腾讯云代金券