code第一部分數組:第十五題 矩陣翻轉(圖像翻轉)

code第一部分數組:第十五題 矩陣翻轉(圖像翻轉)

 

首先想到,純模擬,從外到內一圈一圈的轉,但這個方法太慢。
以下圖,首先沿着副對角線翻轉一次,而後沿着水平中線翻轉一次。ios

源代碼數組

#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;
}
相關文章
相關標籤/搜索