zoukankan      html  css  js  c++  java
  • Algorithm --> 顺序打印矩阵

    顺序打印矩阵

    思路

    参考代码

    #include <iostream>
    using namespace std;
    void printNumAsClockwise(int a[][4], int row, int col)
    {
        if (row < 1 || col < 1)
            return;
        int up = 0, down = row -1, left = 0, right = col -1;
        int i = 0;
        while(up <= down && left <= right)
        {
            for(i = left; i <= right; ++i)
                cout << a[up][i] << " ";
            ++up;
    
            for(i = up; i <= down; ++i)
                cout << a[i][right] << " ";
            --right;
            
            for(i = right; i >= left; --i)
                cout << a[down][i] << " ";
            --down;
    
            for(i = down; i >= up; --i)
                cout << a[i][left] << " ";
            ++left;
                
        }
        cout << endl;
    }
            
    int main()
    {
        int a[][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}};
        cout << sizeof(a) / sizeof(int) << endl;
        printNumAsClockwise(a, 4, 4);
    };

    二维数组可以用一维来代替

    #include <iostream>
    using namespace std;
    void printNumAsClockwise(int *a, int row, int col)
    {
        if (row < 1 || col < 1)
            return;
        int up = 0, down = row -1, left = 0, right = col -1;
        int i = 0;
        while(up <= down && left <= right)
        {
            for(i = left; i <= right; ++i)
                cout << a[up * col + i] << " ";
            ++up;
    
            for(i = up; i <= down; ++i)
                cout << a[i * col + right] << " ";
            --right;
            
            for(i = right; i >= left; --i)
                cout << a[down * col + i] << " ";
            --down;
    
            for(i = down; i >= up; --i)
                cout << a[i * col + left] << " ";
            ++left;
                
        }
        cout << endl;
    }
            
    int main()
    {
        int a[][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}};
        cout << sizeof(a) / sizeof(int) << endl;
        printNumAsClockwise((int*)a, 4, 4);
    };

    注意

    注意判别参数符合范围

    if (row < 1 || col < 1)
            return;

    结果

    16
    1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
  • 相关阅读:
    [luoguP2486] [SDOI2011]染色(树链剖分)
    [POJ3162]Walking Race(DP + 单调队列)
    [HDU3586]Information Disturbing(DP + 二分)
    [luoguP1280] 尼克的任务(DP)
    [luoguP1282] 多米诺骨牌(DP + 背包)
    AOJ 0558 Cheese【BFS】
    POJ 3009 Curling 2.0【带回溯DFS】
    AOJ 0033 Ball【DFS】
    AOJ 0118 Property Distribution【DFS】
    POJ 1979 Red and Black【DFS】
  • 原文地址:https://www.cnblogs.com/jeakeven/p/4600387.html
Copyright © 2011-2022 走看看