23:二维数组回形遍历

来源:互联网 发布:mac的office软件下载 编辑:程序博客网 时间:2024/05/19 09:04

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年医学部练习题

分析:参考:http://www.cnblogs.com/geek-007/p/5677254.html

不过有一个问题。。。往右遍历的时候,如果不到底,会发生超时错误。。这一点不是很明白。。。


#include <stdio.h>#include <iostream>#include <stack>#include <string.h>#include <queue>#include <cmath>#include <vector>#include <algorithm>#include <map>#include <set>#include <string>using namespace std;typedef long long LL;#define MAX 1001int a[MAX][MAX];int b[MAX][MAX];int main() {    //freopen("in.txt", "r", stdin);    //freopen("out.txt", "w", stdout);    int n, m;    scanf("%d%d",&n,&m);    for(int i = 0; i < n; i++) {        for(int j = 0; j < m; j++) {            scanf("%d",&a[i][j]);        }    }    int flag = 1; //当前为第1层    int sum = n * m;    while(1){        for(int i = flag - 1; i < m - flag; i++){            //cout << a[flag][i] << endl;            printf("%d\n",a[flag - 1][i]);            sum--;            if(sum == 0){                return 0;            }        }        //这一点 如果第二个for循环将i的条件改为 i < n - flag;        //即 终止条件 i == n - flag - 1;        //第三个for循环 的 i的初始值 由 m - flag 开始 会造成超时错误。。不知道为啥。。。        for(int i = flag - 1; i <= n - flag; i++){            //cout << a[i][m - flag - 1] << endl;            printf("%d\n",a[i][m - flag]);            sum--;            if(sum == 0){                return 0;            }        }        for(int i = m - flag - 1; i > flag - 1; i--){            //cout << a[n - flag - 1][i] << endl;            printf("%d\n",a[n - flag][i]);            sum--;            if(sum == 0){                return 0;            }        }        for(int i = n - flag; i >= flag; i--){            //cout << a[i][flag] << endl;            printf("%d\n",a[i][flag - 1]);            sum--;            if(sum == 0){                return 0;            }        }        flag++;    }    return 0;}


原创粉丝点击