• 螺旋式打印一个二维数组


    问题描述:螺旋式打印一个二维数组。如

    1     16     3     2     17

    8     6       4     3     23  

    2     5       7     8     12

    21   2       4     6     13

    要求打印后顺序为:

    1     16   3     2     17   23     12     13   6     4     2     21     2     8   6     4     3     8     7     5

            此题的思路有很多中,最容易想到的方法就是设置一个表示方向的变量,根据当前的方向来判断下一步的操作,当到达边界的时候方向顺时针改变。另外有一个bool型的数组来表示相应位置是否被访问过,初始化都是0(未访问),当输出一个数就把相应位置的标记置为1。在前方向上如果碰到已经被访问过的位置就顺时针改变方向,一直到最后所有位置的数都访问位置。

    一种比较简单的算法。在输出的时候可以给水平方向和垂直方向各设置两个坐标,start_x, end_x, start_y, end_y, 分别表示当前水平方向输出区间应该在start_x和end_x之间,垂直方向输出区间在start_y和end_y直接,每次转弯的时候只需要改变区间的边界就可以了。具体代码如下:

    #include<iostream>
    using namespace std;
    
    int     arr[6][5]= 
    {{1,           16,           3,           2,             17}, 
    {8,           6,             4,           3,             23}, 
    {2,           5,             7,           8,             12}, 
    {21,         2,             4,           6,             13}, 
    {11,       111,           111,       132,         12}, 
    {31,       311,           4111,     332,         32} 
    };      
    
    void main()
    {
            // 初始的区间坐标
        int startX = 0, endX = 4;
        int startY = 0, endY = 5;
        
        while(startX<=endX && startY<=endY)  // 循环条件
        {
            int i;
            for(i=startX; i<=endX; i++)  // 输出上边的行
                cout << arr[startY][i] << " ";
            startY ++;         // 行的开始坐标增加
            for(i=startY; i<=endY; i++)  // 输出右边的列
                cout << arr[i][endX] << " ";
            endX --;           // 列的结束坐标减小
            for(i=endX; i>=startX; i--)   // 输出下边边的行
                cout << arr[endY][i] << " ";
            endY --;           // 行的结束坐标减小
            for(i=endY; i>=startY; i--)  // 输出左边的列
                cout << arr[i][startX] << " ";
            startX ++;         // 列的开始坐标增加
        }
    }

    参考:http://blog.csdn.net/lonelywinter340/article/details/3292686

  • 相关阅读:
    【QT 学习笔记】 一、 VS2015+ QT环境安装
    Ubuntu16.04 + caffe + cuda 环境搭建
    【Caffe学习笔记】一 、环境安装 Caffe + cuda + windows10 + VS2015 安装笔记, win7也适用
    【CNN】 吴恩达课程中几种网络的比较
    【图像处理】二 高斯滤波及其加速方法
    【图像处理 】 一、OSTU分割法
    1028: C语言程序设计教程(第三版)课后习题8.2
    函数和带参的宏,从三个数中找出最大的数
    Last Defence (run time error)
    Penalty
  • 原文地址:https://www.cnblogs.com/youxin/p/3833542.html
Copyright © 2020-2023  润新知