旋转正方形矩阵

Problem:
  旋转正方形矩阵【题目】 给定一个整型正方形矩阵matrix,
  请把该矩阵调整成顺时针旋转90度的样子。
  【要求】 额外空间复杂度为O(1).

Solution:
  同样,采用由外向内一圈一圈变换,找到元素变换位置的规律即可。
  难点在于区分偶数维矩阵和奇数维矩阵的不同操作

Code:

  

 1 #pragma once
 2
 3 #include <iostream>
 4 using namespace std;
 5
 6 template<class T>
 7 void RotateMatrix(T& arr,const int x, const int y)//使用数组的引用传参,怎可在原数组上进行旋转
 8 {
 9     int lx = 0, ly = 0; //左上角坐标
10     int rx = x - 1, ry = y - 1;//右下角的坐标
11
12     while (lx < rx || ly < ry)
13     {
14
15         for (int k = 0; k < ry - ly; ++k)//每一个圈次中所要旋转的元素
16         {
17             int temp = arr[lx][ly + k];
18             arr[lx][ly + k] = arr[rx - k][lx];
19             arr[rx - k][lx] = arr[rx][ry - k];
20             arr[rx][ry - k] = arr[lx + k][ry];
21             arr[lx + k][ry] = temp;
22         }
23
24         lx += 1;//左上角右下移
25         ly += 1;
26         rx -= 1;//右下角左上移
27         ry -= 1;
28     }
29
30 }
31
32 void Test()
33 {
34     int aa[3][3] = { 1,2,3,4,5,6,7,8,9 };
35     int bb[4][4] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };
36
37     RotateMatrix(aa, 3, 3);
38     for (auto &a : aa)
39     {
40         for (auto b : a)
41             cout << b << "  ";
42         cout << endl;
43     }
44     cout << endl << "******************************" << endl;
45
46     RotateMatrix(bb, 4, 4);
47     for (auto &a : bb)
48     {
49         for (auto b : a)
50             cout << b << "  ";
51         cout << endl;
52     }
53     cout << endl << "******************************" << endl;
54
55 }

原文地址:https://www.cnblogs.com/zzw1024/p/10989042.html

时间: 2024-08-19 04:25:54

旋转正方形矩阵的相关文章

转载文章 利用旋转正方形与图形的组合实现爱心

实现爱心效果图 源码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>利用旋转正方形与图形的组合实现爱心</title> 6 <style> 7 html { 8 font-family: "microsoft yahei"; 9 } 10 .heartShaped { 11 position

NYOJ 598 旋转圆柱矩阵

旋转圆柱矩阵 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 将圆柱体的侧面展开能得到一个m*n的矩形.这是姑且看成一个01矩阵, 我们需要通过特定的移动得到另一个矩阵(该矩阵其中任意的某一列全部为1),每一次只能移动一行,且只能移动一位,可以向左移动,也可以向右移动,求最小的移动步数,如不能通过移动得到结果,则输出"-1". 例如: 3*5的矩阵 00001 10000 00001 我们只需要将第二行向左移动一位即可得到所求. 输入 第一行一个整数N(N

《程序员代码面试指南》第八章 数组和矩阵问题 将正方形矩阵顺时针转动90

题目 将正方形矩阵顺时针转动90 java代码 package com.lizhouwei.chapter8; /** * @Description: 将正方形矩阵顺时针转动90 * @Author: lizhouwei * @CreateDate: 2018/4/28 22:16 * @Modify by: * @ModifyDate: */ public class Chapter8_2 { public void rotate(int[][] matrix) { int tR = 0; i

c++ 知道旋转前后矩阵向量值 求旋转矩阵c++/c#代码 知道两个向量求他们的旋转矩阵

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12115244.html 知道旋转前后矩阵向量值 如何去求旋转矩阵R 的c++/c#代码??? 因为需要用到矩阵处理库所以需要先配置 一.Eigen库的配置(VS2017) Eigen库下载: http://eigen.tuxfamily.org/index.php?title=Main_Page 下载文件并解压: 然后在自己的VS工程属性中的这个附加包含进去 注意看清楚了 是D:\Depen

算法总结之 将正方形矩阵顺时针转动90度

给定一个 N * N的矩阵,把这个矩阵调整成顺时针转动90度后的形式 要求额外空间复杂度为O(1) 这里仍然使用分圈处理方式 如果你愿意一层一层一层的拨开我的心~  哈哈哈 由外到内的旋转 上代码一目了然:

绕任意轴旋转的矩阵推导总结

前言 常用的几何变换中旋转是较为复杂的一种,最近看<Physically Based Rendering, Second Edition: From Theory To Implementation>一书涉及绕任意轴旋转的实现,也给出了大体思路,但具体的推导过程及最后的旋转矩阵并未直接地给出,故根据参考Animated CGEM: Rotation About an Arbitrary Axis总结(欢迎指正). (一)基础 1.点乘与叉乘 点乘(dot)亦称作内积或数量积,如图,a·b =

使用canvas实现超绚丽的旋转正方形

自己无意中的一个小"bug",却让动画变得超绚丽= = 所以,不要害怕出bug,谁知道bug不会开出一朵绚丽的花呢? <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title></title> <style> body{ text-align: center; } canvas{ b

[CareerCup] 11.3 Search in Rotated Sorted Array 在旋转有序矩阵中搜索

11.3 Given a sorted array of n integers that has been rotated an unknown number of times, write code to find an element in the array. You may assume that the array was originally sorted in increasing order. EXAMPLE Input: find 5 in {15, 16, 19, 20, 2

将正方形矩阵顺时针转动90度

题目:给定一个N*N的矩阵matrix,求把这个矩阵调整成顺时针转动90度后的形式. 例如: 1     2    3    4 5     6    7    8 9    10  11  12 13  14  15  16 顺时针转动90度后为: 13    9    5   1 14   10   6   2 15   11   7   3 16   12   8   4 要求:额外空间复杂度为O(1) 解答: 这里任然使用分圈处理的方式,在矩阵中用左上角的坐标(tr,tc)和右下角的坐标