zoukankan      html  css  js  c++  java
  • code第一部分数组:第十五题 矩阵翻转(图像翻转)

    code第一部分数组:第十五题 矩阵翻转(图像翻转)

    首先想到,纯模拟,从外到内一圈一圈的转,但这个方法太慢。
    如下图,首先沿着副对角线翻转一次,然后沿着水平中线翻转一次。

    源代码

    #include <iostream>
    #include <vector>
    using namespace std;
    
    
    //引用类型形参
    void swap(int &n,int &m)
    {
        int temp=n;
        n=m;
        m=temp;
    }
    
    //指针类型形参
    void swap1(int *a, int *b)
    {
        int temp;
        temp = *a;
        *a = *b;
        *b = temp;   
    }
    
    //采用加减法的swap函数
    void swap2(int &a, int &b)
    {
        a = a + b;
        b = a - b;
        a = a - b;
    }
    
    //使用异或运算的swap函数
    void swap3(int &a, int &b)
    {
        a = a^b;
        b = a^b;
        a = a^b;
    }
    
    
    void rotate(int a[][3],int n)
    {
        //int i,j;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n-i; j++)
            {
                swap(a[i][j],a[n-j-1][n-i-1]);
            }
        }
    
        for (int i = 0; i < n/2; i++)
        {
            for (int j = 0; j < n; j++)
            {
                swap(a[i][j],a[n-i-1][j]);
            }
        }
    
    }
    
    
    void rotate2(vector<vector<int>>& matrix)
    {
        const int n = matrix.size();
        for (int i = 0; i < n; i++)
        {// 沿着副对角线反转
            for (int j = 0; j < n - i; j++)
            {
                swap(matrix[i][j], matrix[n - 1 - j][n - 1 - i]);
            }
        }
    
        for (int i = 0; i < n / 2; i++)
        {// 沿着水平中线反转
            for (int j = 0; j < n; j++)
            {
                swap(matrix[i][j], matrix[n - 1 - i][j]);
            }
        }
    }
    
    
    
    int main()
    {
        int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
        rotate(a,3);
    
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j< 3; j++)
            {
                cout<<a[i][j]<<endl;
            }
        }
    
        vector<vector<int>> matrix={{1,2,3},{4,5,6},{7,8,9}};
        rotate2(matrix);
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j< 3; j++)
            {
                cout<<matrix[i][j]<<endl;
            }
        }
        /*vector<int> row1 = {1,2,3};
        vector<int> row2 = {4,5,6};
        vector<int> row3 = {7,8,9};
        vector<vector<int>> matrix;
        matrix.push_back(row1);
        matrix.push_back(row2);
        matrix.push_back(row3);
        rotate2(matrix);
        int n = matrix.size();
        for(int i = 0;i < n;i++){
            for(int j = 0;j < n;j++){
                cout<<matrix[i][j]<<endl;
            }
        }*/
        return 0;
    }
  • 相关阅读:
    Vue使用QrCode插件生成二维码
    简述Vue的路由与视图
    EntityFrameworkCore将数据库Timestamp类型在程序中转为long类型
    Linux常用命令——软件包管理
    Linux常用命令——文本编辑器Vim
    Linux常用命令——关机重启命令
    Linux常用命令——网络命令
    Linux常用命令——压缩解压命令
    Linux常用命令——文件搜索命令
    .NET Core 配置GC工作模式与内存的影响
  • 原文地址:https://www.cnblogs.com/tao-alex/p/6443042.html
Copyright © 2011-2022 走看看