不额外申请内存(另外的一个二维数组空间),将一个方阵(二维数组)原地旋转90度,主要的思路是,由外向内,一圈圈的进行旋转(就是依次进行交换),如下图所示,当这些圈圈都交换完了之后,就完成了原地旋转了。

代码如下:

 #include <time.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define MIN 0
#define MAX 9 void rotate(int **matrix, int size);
void new_matrix(int ** matrix, int size);
void delete_matrix(int ** matrix, int size);
void rand_matrix(int ** matrix, int size);
void print_matrix(int ** matrix, int size);
int main() { int size = ;
int **matrix = new int *[size];
new_matrix(matrix, size);
srand((unsigned)(time()));
rand_matrix(matrix, size);
print_matrix(matrix, size);
cout << "***************" << endl;
rotate(matrix, size);
print_matrix(matrix, size);
delete_matrix(matrix, size);
delete []matrix;
getchar();
getchar();
return ;
}
void rotate(int **matrix, int size)
{
int temp;
for (int i = ; i < size / ; i++)
{
int first = i;
int last = size - - i;
for (int j = first; j < last; j++)
{
int offset = size - - j;
int temp = matrix[j][i];
matrix[j][i] = matrix[last][j];
matrix[last][j] = matrix[offset][last];
matrix[offset][last] = matrix[i][offset];
matrix[i][offset] = temp;
}
}
}
void new_matrix(int ** matrix, int size)
{
for (int i = ; i < size; i ++)
{
matrix[i] = new int[size];
}
}
void delete_matrix(int ** matrix, int size)
{
for (int i = ; i < size; i ++)
{
delete[] matrix[i];
}
}
void rand_matrix(int ** matrix, int size)
{
for (int i = ; i < size; i ++)
{
for (int j = ; j < size; j ++)
{
matrix[i][j] = MIN + rand() % (MAX - MIN + );
} }
}
void print_matrix(int ** matrix, int size)
{
for (int i = ; i < size; i ++)
{
for (int j = ; j < size; j ++)
{
cout << " " << matrix[i][j];
}
cout << endl;
}
}

代码中还涉及到了通过new与delete分配与释放一个二维数组,也是面试中的一个问题。

C++ 方阵原地旋转90度的更多相关文章

  1. LeetCode48, 如何让矩阵原地旋转90度

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第29篇,我们来看一道简单的矩阵旋转问题. 题意 题目的要求很简单,给定一个二维方形矩阵,要求返回矩阵旋转90度之后的 ...

  2. 不占用额外内存空间能否做到 将图像旋转90度 N &#215; N矩阵表示的图像,其中每个像素的大小为4字节

    给定一幅由N × N矩阵表示的图像,其中每个像素的大小为4字节,编写一种方法,将图像旋转90度. 不占用额外内存空间能否做到? 示例 1: 给定 matrix = [ [1,2,3], [4,5,6] ...

  3. 关于android中调用系统拍照,返回图片是旋转90度

    转载博客:http://blog.csdn.net/walker02/article/details/8211628 项目开发中遇到的一个问题,对于三星手机在做手机照片选择时出现图片显示不正常,研究后 ...

  4. 移动端上传照片 预览+Draw on Canvas's Demo(解决 iOS 等设备照片旋转 90 度的 bug)

    背景: 本人的一个移动端H5项目,需求如下: 需求一:手机相册选取或拍摄照片后在页面上预览 需求二:然后绘制在canvas画布上 这里,我们先看一个demo(http://jsfiddle.net/q ...

  5. 利用exif.js解决ios手机上传竖拍照片旋转90度问题

    html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...

  6. python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  7. 解决ios手机上传竖拍照片旋转90度问题

    html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...

  8. PyOpenCV图像逆时针旋转90度

    warpAffine方法效果很搓,留下大片黑色区域. 使用flip和transpose可以实现逆时针旋转90度.先flip或先transpose均可. #coding:utf-8 import cv2 ...

  9. MTK 屏幕旋转90度

    http://blog.csdn.net/ouo555/article/details/44806837 1.屏幕显示顺时针旋转90度 lk 横屏logo,顺时针旋转90度显示修改bootable/b ...

随机推荐

  1. 字符串时间与Unix时间戳相互转换

    字符串时间与Unix时间戳相互转换 /** * @Author: wangkun * @Date : 2016/1/21 13:43 * @Description : 字符串时间转换为Unix时间戳 ...

  2. 利用Backtrace来捕获段错误堆栈信息

    具体参考文档:https://blog.csdn.net/gatieme/article/details/84189280 测试Demo: #include <execinfo.h> #i ...

  3. Javascript Base64加密解密代码

    <script language="javascript" runat="server"> var keyStr = "ABCDEFGHI ...

  4. GoLang之strings、buffers、bytes、binary包

    strings包 strings包的使用举例: package main import s "strings" import "fmt" var p = fmt ...

  5. SpringMVC -- @RequestMapping -- 随记

    @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. RequestMappi ...

  6. 【问题集】redis集群set报错(error) MOVED 11469 192.168.181.201:7002

    没有启动集群模式(即缺少了那个"-c"): redis-cli -c -h yourhost -p yourpost

  7. css3整理--background-size

    background-size语法: /*Mozilla*/ -moz-background-size: auto || <length> || <percentage> || ...

  8. Java 正则表达式 过滤html标签

    extends:http://aguang520.iteye.com/blog/1056686# 前段时间开发的时候要读取一篇文章的简介内容(也就是前200个字符),使用了隐藏字段,可能有人就要问了, ...

  9. Xshell登录Ubuntu12.04

    Ubuntu安装ssh服务: sudo apt-get install openssh-server 打开Xshell,选择“新建”,“连接”设置里选择SSH,主机填入需要连接的主机的IP地址.在“用 ...

  10. git 搭建本地仓库

    文档 创建仓库 mkdir project cd project/ git init git remote add origin /d/project/.git // 仓库创建好了 echo hell ...