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
  • 相关阅读:
    location.replace与location.href,location.reload的区别
    转载关于KeyPress和KeyDown事件的区别和联系
    Javascript中call的使用
    按值和按引用的比较
    理解cookie的path和domain属性
    HTML的快速写法:Emmet和Haml
    SVN标准命令
    linux常用命令
    Android4.0(Phone)拨号启动过程分析(一)
    Activity生命周期
  • 原文地址:https://www.cnblogs.com/jeakeven/p/4600387.html
Copyright © 2011-2022 走看看