百练noi :二维数组回形遍历

来源:互联网 发布:淘宝基础版 全屏店招 编辑:程序博客网 时间:2024/05/19 09:39

23:二维数组回形遍历

  • 查看
  • 提交
  • 统计
  • 提问
总时间限制: 
1000ms 
内存限制: 
65536kB
描述

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


输入
输入的第一行上有两个整数,依次为row和col。
余下有row行,每行包含col个整数,构成一个二维整数数组。
(注:输入的row和col保证0 < row < 100, 0 < col < 100)
输出
按遍历顺序输出每个整数。每个整数占一行。
样例输入
4 41 2 3 412 13 14 511 16 15 610 9 8 7
样例输出
12345678910111213141516
来源
北京大学2009年医学部练习题
代码:
#include<cstdio>int a[100][100];bool vis[100][100];int main(){    int r,c;    scanf("%d%d",&r,&c);    for(int i = 0; i <r;i++){        for(int j=0;j<c;j++){            scanf("%d",&a[i][j]);        }    }    int i = 0,j=0,cnt = 0;    while(cnt < r*c){        while(j<c && !vis[i][j]){            printf("%d\n",a[i][j]);            vis[i][j] = true;            j++;cnt++;        }        j--;i++;        while(i< r&& !vis[i][j]){            printf("%d\n",a[i][j]);            vis[i][j] = true;            i++;cnt++;        }        i--;j--;        while(j>=0 && !vis[i][j]){            printf("%d\n",a[i][j]);            vis[i][j] = true;            j--;cnt++;        }        j++;i--;        while(i>=0 && !vis[i][j]){            printf("%d\n",a[i][j]);            vis[i][j] = true;            i--;cnt++;        }        i++;j++;    }    return 0;}


原创粉丝点击