• C++ 方阵原地旋转90度


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

    代码如下: 

     1 #include <time.h>
     2 #include <stdlib.h>
     3 #include <iostream>
     4 using namespace std;
     5 #define MIN 0
     6 #define MAX 9
     7 
     8 
     9 void rotate(int **matrix, int size);
    10 void new_matrix(int ** matrix, int size);
    11 void delete_matrix(int ** matrix, int size);
    12 void rand_matrix(int ** matrix, int size);
    13 void print_matrix(int ** matrix, int size);
    14 int main() {
    15 
    16     int size = 5;
    17     int **matrix = new int *[size];
    18     new_matrix(matrix, size);
    19     srand((unsigned)(time(0)));
    20     rand_matrix(matrix, size);
    21     print_matrix(matrix, size);
    22     cout << "***************" << endl;
    23     rotate(matrix, size);
    24     print_matrix(matrix, size);
    25     delete_matrix(matrix, size);
    26     delete []matrix;
    27     getchar();
    28     getchar();
    29     return 0;
    30 }
    31 void rotate(int **matrix, int size)
    32 {
    33     int temp;
    34     for (int i = 0; i < size / 2; i++)
    35     {
    36         int first = i;
    37         int last = size - 1 - i;
    38         for (int j = first; j < last; j++)
    39         {
    40             int offset = size - 1 - j;
    41             int temp = matrix[j][i];
    42             matrix[j][i] = matrix[last][j];
    43             matrix[last][j] = matrix[offset][last];
    44             matrix[offset][last] = matrix[i][offset];
    45             matrix[i][offset] = temp;
    46         }
    47     }
    48 }
    49 void new_matrix(int ** matrix, int size)
    50 {
    51     for (int i = 0; i < size; i ++)
    52     {
    53         matrix[i] = new int[size];
    54     }
    55 }
    56 void delete_matrix(int ** matrix, int size)
    57 {
    58     for (int i = 0; i < size; i ++)
    59     {
    60         delete[] matrix[i];
    61     }
    62 }
    63 void rand_matrix(int ** matrix, int size)
    64 {
    65     for (int i = 0; i < size; i ++)
    66     {
    67         for (int j = 0; j < size; j ++)
    68         {
    69             matrix[i][j] = MIN + rand() % (MAX - MIN + 1);
    70         }
    71         
    72     }
    73 }
    74 void print_matrix(int ** matrix, int size)
    75 {
    76     for (int i = 0; i < size; i ++)
    77     {
    78         for (int j = 0; j < size; j ++)
    79         {
    80             cout << " " << matrix[i][j];
    81         }
    82         cout << endl;
    83     }
    84 }

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

  • 相关阅读:
    Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-1
    Matlab高级教程_第一篇:Matlab基础知识提炼_06
    利用ubuntu的alias命令来简化许多复杂难打的命令
    无线路由设置
    解决Ubuntu下使用命令行subl 打开Sublime text3无法输入中文的问题
    ubuntu 14.04 lamp 安装与配置
    ubuntu14.04 login loop issue
    机器学习资源大全
    技巧:利用putty通过win7访问ubuntu
    使用XML-RPC进行远程文件共享
  • 原文地址:https://www.cnblogs.com/rainsoul/p/6604764.html
Copyright © 2020-2023  润新知