不额外申请内存(另外的一个二维数组空间),将一个方阵(二维数组)原地旋转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. [C#] 一款代码注释清理工具

    [C#] 一款代码注释清理工具   在程序开发过程中,很多时候我们都会在代码中进行注释,以便大家更容易理解或能更直观明白某个类或方法是用来做什么的,我们就会用注释 就以C#为列子,注释符大致为'//' ...

  2. 接口app 接口中上传 图片

    /** * @Method base64图片上传 * @author 黄国金 * return array * date 2016-1-10 */function saveBase64Image($b ...

  3. 分布式系统CAP理论与CA选择

    总结: CAP指的是数据一致性.服务可用性.分区容错性:(这里的一致性指的是强一致性,又叫原子性或线性一致性:可用性指的是所有读写操作都要能终止,没有时延上的要求) 分布式系统中P是必选项:在P必选的 ...

  4. Xcode6: CocoaPods 错误 target overrides the `OTHER_LDFLAGS`...

    CocoaPods 错误 target overrides the `OTHER_LDFLAGS`... Xcode 升级到 6.0 后,更新 CocoaPods,出现了如下的警告 [!] The ` ...

  5. 使用UIScrollView 结合 UIImageView 实现图片循环滚动

    场景: 在开发工作中,有时我们需要实现一组图片循环滚动的情况.当我们使用 UIScrollView 结合 UIImageView 来实现时,一般 UIImageView 会尽量考虑重用,下面例子是以( ...

  6. duilib进阶教程 -- TreeView控件的bug (9)

    一.不自动调整子控件的宽度(TreeView宽度小于260时) 相信亲们用同样的代码,显示效果肯定和Alberl不一样吧~O(∩_∩)O~ 嘿嘿,仔细对比下,看看你们的列表头背景图片是下面这样的么? ...

  7. go如何进行交叉编译

    https://www.jianshu.com/p/4b345a9e768e 如果在powershell环境中, 需要换中设置方式 $env:GOOS="linux" $env:G ...

  8. INTERVAL

    select sysdate - interval '10' day as "10天前",       sysdate - interval '10' hour as " ...

  9. 我的第一篇paper

    找实习虽然只为自己争取到一个秋季的绿色通道,但可喜的是,我投的几篇paper,终于中了一篇. 现在可以在英文数据库或google scholar上面搜索到自己名字,感觉很nice,研究生的心愿算是完成 ...

  10. I - 迷宫问题

    定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, ...