23:二维数组回形遍历

描述

给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示:

输入

输入的第一行上有两个整数,依次为row和col。

余下有row行,每行包含col个整数,构成一个二维整数数组。
(注:输入的row和col保证0 < row < 100, 0 < col < 100)

输出

按遍历顺序输出每个整数。每个整数占一行。样例输入

4 4
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
样例输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
题意
将数组按回形从外向内顺时针顺序输出
思路
从初始位置开始,我们从左往右开始输出,直到检测此时数组的内容为0。
从1给予的初始位置开始,我们从上往下开始输出,直到检测此时数组的内容为0
从2给予的初始位置开始,我们从右往左开始输出,直到检测此时数组的内容为0
从3给予的初始位置开始,我们从下往上开始输出,直到检测此时数组的内容为0
以此循环
代码
#include<bits/stdc++.h>
using namespace std;
int main(){

     int r,c,a[110][110],x,y,r1,r2,c1,c2;
     cin>>r>>c;
     for(int i=0;i<r;i++){
         for(int j=0;j<c;j++){
              cin>>a[i][j];//输入数组
           }
     }
     r1=0;r2=r-1;c1=0;c2=c-1;
     while(r1<=r2 && c1<=c2){
          for(int j=c1;j<=c2;j++){
               cout<<a[r1][j]<<endl;//行,从左到右输出
          }r1++;
          for(int i=r1+1;i<=r2;i++){
               cout<<a[i][c2]<<endl;//列,从上到下输出
          }c2--;
          if(r1!=r2){
               for(int j=c2-1;j>=c1;j--){
                    cout<<a[r2][j]<<endl;//行,返回,从左到右输出
               }r2--;
          }
          if(c1!=c2){
               for(int i=r2-1;i>=r1+1;i--){
                    cout<<a[i][c1]<<endl;//列,返回,从下到上输出
               }c1++;
          }

     }
}

posted @ 2023-04-09 18:50  yyk666666  阅读(521)  评论(0)    收藏  举报