矩阵旋转90度

初始化矩阵

void initial_square_matrix(int * * * pm, int n)
{
    pm[0] = new int *[n];
    for (int i = 0; i < n; i++)
    {
        pm[0][i] = new int[n];
        for (int j = 0; j < n; j++)
            pm[0][i][j] = i * n + j + 1;
    }
}

销毁矩阵

void destroy_square_matrix(int * * * pm, int n)
{
    for (int i = 0; i < n; i++)
        if (NULL != pm[0][i])
            delete[] pm[0][i];
    delete[] pm[0];
    pm[0] = NULL;
}

打印矩阵

void print_square_matrix(int * * m, int n)
{
    cout << "------------------------------------" << endl;
    for (int i = 0; i < n; ++ i)
    {
        for (int j = 0; j < n; j++)
            cout << m[i][j] << "\t";
        cout << endl;
    }
}

向左旋转打印

void print_square_matrix_reversel90(int * * m, int n)
{
    cout << "------------------------------------" << endl;
    for (int i = 0; i < n; ++ i)
    {
        for (int j = 0; j < n; j++)
            cout << m[j][n - i - 1] << "\t";
        cout << endl;
    }
}

向右旋转打印

void print_square_matrix_reverser90(int * * m, int n)
{
    cout << "------------------------------------" << endl;
    for (int i = 0; i < n; ++ i)
    {
        for (int j = 0; j < n; j++)
            cout << m[n - j - 1][i] << "\t";
        cout << endl;
    }
}

很特殊的一种旋转

/*
仅仅适用于类似这样的矩阵
1       2       3       4       5
6       7       8       9       10
11      12      13      14      15
16      17      18      19      20
21      22      23      24      25
*/
void reverse_square_matrix(int * * m, int n)
{
    for (int i = 0; i < n; ++ i)
    {
        for (int j = 0; j < n; j++)
            m[i][j] = m[i][j] * (n * n - n + 1) % (n * n + 1);
    }
}

测试

 1     int mn = 5;
 2     int ** m;
 3
 4     initial_square_matrix(&m, mn);
 5     print_square_matrix(m, mn);
 6     print_square_matrix_reversel90(m, mn);
 7     print_square_matrix_reverser90(m, mn);
 8     reverse_square_matrix(m, mn);
 9     print_square_matrix(m, mn);
10     destroy_square_matrix(&m, mn);
时间: 2024-11-05 06:41:54

矩阵旋转90度的相关文章

O(1)空间复杂度实现n*n矩阵旋转90度

O(1)空间复杂度实现n*n矩阵旋转90度, #include <iostream> using namespace std; #define ARRAY_SIZE 5 void print_two_array (int a[][ARRAY_SIZE]) { cout << endl;    for (int i=0; i<ARRAY_SIZE; i++) { for (int j=0; j<ARRAY_SIZE; j++) {    cout << a[i

矩阵旋转90度(keep it up)

一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度. 你能原地进行操作吗?(即不开辟额外的存储空间) 这个题第一感觉就是一次交换矩阵的元素: 比如 3*3 矩阵 1 2 3 4 5 6 7 8 9 先处理第一行,一次逆时针旋转四个元素,下面是二次做的 3 2 9          3 6 9 4 5 6          2 5 8 1 8 7          1 4 7 第一次         第二次 如果是5*5的矩阵 1   2   3   4   5 6

二维数组(矩阵)之将矩阵旋转90度

将矩阵旋转90度: 题目描述: 例如将一个5*5的矩阵顺时针旋转90度:旋转前 1       2        3         4         5 6       7        8         9        10 11    12      13      14       15 16    17      18      19       20 21    22      23      24       25 选转后: 21     16      11       6

CC150:将一个矩阵旋转90度

一张图像表示成n X n的矩阵,写一个函数把图像旋转90度.不开辟额外的存储空间 我们假设要将图像逆时针旋转90度.原图如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 逆时针旋转90度后的图应该是: 4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 我们要如何原地进行操作以达到上面的效果呢?可以分两步 第一步交换主对角线两侧的对称元素, 第二步交换第i行和第n-1-i行,即得到结果. 看图示: 原图:           第一

算法题:矩阵旋转90度

#include <iostream> #include <iomanip> using namespace std; void Grial(int (*a)[5],int n) { //数组顺时针旋转90度. //边界值的考虑让我小小的思考了一下. int temp; int startX = 0; int startY = 0; int j = 0; while (startX < n/2) { startX = j; for (int i = j; i < n -

矩阵逆时针旋转90度,空间复杂度O(1)

将一个矩阵逆时针旋转90度,首先可以沿左上角-右下角斜对角线,进行上下交换数据,然后上下数据交换即可. 1 #include <stdio.h> 2 #include <stdlib.h> 3 //矩阵逆时针旋转90度 4 int main() 5 { 6 int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 7 int b[3][3]; 8 int i; 9 int j; 10 int temp; 11 printf("原始矩阵\n")

opencv图像原地(不开辟新空间)顺时旋转90度

前一阵朋友碰到这么一道题:将图像原地顺时针旋转90度,不开辟新空间.此题看似平易(题目简短),仔细研究发现着实不容易.经过一番探索后,终于找到了正确的算法,但是当使用opencv实现时,有碰到了困难而且费了一番周折才找到问题所在. 首先,解决这个问题,先简化成原地90度旋转一M×N的矩阵A(注意不是N×N方阵).对于2×3的矩阵A = {1,2,3;4,5,6},其目标为矩阵B = {4,1;5,2;6,3}.因为是原地旋转,这里A和B应指向同一大小为6的内存空间. 这里有这样一个重要的导出公式

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

html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非横拍的ios照片进行角度旋转修正. 利用exif.js读取照片的拍摄信息,详见  http://code.ciaoca.com/javascript/exif-js/ 这里主要用到Orientation属性. Orientation属性说明如下: 旋转角度 参数 0° 1 顺时针90° 6 逆时针9

移动端上传照片 预览+draw on Canvas demo(解决iOS等设备照片旋转90度的bug)

背景: 本人的一个移动端H5项目,需求如下: 手机相册选取或拍摄照片后在页面上预览 然后绘制在canvas画布上. 这里,我们先看一个demo(http://jsfiddle.net/q3011893/83qfqpk8/embedded/) 操作步骤: 1.点击选择文件,拍摄一张照片,此时"预览:"文字下会显示你刚才拍摄的照片: 2.再点击"draw on Canvas",该按钮下的画布会绘制你刚才拍摄的照片. 正常的结果: 正文: 让input file支持拍照+