23:二维数组回形遍历

23:二维数组回形遍历

总时间限制: 1000ms 内存限制: 65536kB描述

给定一个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

来源北京大学2009年医学部练习题这道题的关键,在于1.如何找到四个方向2.四个方向分别应该怎么走3.方向转换的判断条件

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 using namespace std;
 6 int a[10001][10001];
 7 int b[10001][10001];
 8 int now=4;// 1上 2下 3左 4右 
 9 int tot=1;
10 int main()
11 {
12     int n,m;
13     cin>>n>>m;
14     int i=1,j=1;
15     for(int i=1;i<=n;i++)
16     {
17         for(int j=1;j<=m;j++)
18         {
19             cin>>a[i][j];
20         }
21     }
22     cout<<a[1][1]<<endl;
23     b[1][1]=1;
24     while(tot!=n*m)
25     {
26         if((j==m&&now==4)||(b[i][j+1]==1&&now==4))
27             now=2;//下 
28             if((i==n&&now==2)||(b[i+1][j]==1&&now==2))
29             now=3;//左 
30             if((j==1&&now==3)||(b[i][j-1]==1&&now==3))
31             now=1;//上
32             if(b[i-1][j]==1&&now==1)
33             now=4;//右 
34             if(now==1)
35             {
36                 cout<<a[i-1][j]<<endl;
37                 b[i-1][j]=1;
38                 i--;
39                 tot++;
40             }//上 
41             if(now==2)
42             {
43                 cout<<a[i+1][j]<<endl;
44                 b[i+1][j]=1;
45                 tot++;
46                 i++;
47             }//下 
48             if(now==3)
49             {
50                 cout<<a[i][j-1]<<endl;
51                 b[i][j-1]=1;
52                 tot++;
53                 j--;
54             }//左 
55             if(now==4)
56             {
57                 cout<<a[i][j+1]<<endl;
58                 b[i][j+1]=1;
59                 tot++;
60                 j++;
61             }//右 
62     }
63         
64     return 0;
65 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的博客

C编程笔记

1.编译命令gcc test.c -o test 带上参数o就是指定编译文件名 2.printf(“%.2lf”,b) 其中前面2是小数点后位数,l是字母...

3715
来自专栏伪君子的梦呓

leetcode 题解~两数之和 ~ C++做法

1845
来自专栏一直在跳坑然后爬坑

RxJava2操作符之“Scan”作用示例用法运行结果分析总结

扫描,遍历,用法和上一个Reduce操作符差不多,只是这个操作符会将每一个过程的中间产物发射出来,而不是只发射结果

1003
来自专栏ACM算法日常

字符串的距离(动态规划) - leetcode 72

,因为在刷leetcode的动态规划专题。动态规划虽然定义很简单,但是对于复杂的动态规划题目,很多时候还是很棘手的。

862
来自专栏chenjx85的技术专栏

leetcode-46-全排列

vector<vector<int>> permute(vector<int>& nums) 

2703
来自专栏数据结构与算法

3038 3n+1问题

3038 3n+1问题  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 白银 Silver 题解 题目描述 Description 3n+...

3667
来自专栏个人分享

二维数组中的查找

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该...

1122
来自专栏数据结构与算法

P3391 文艺平衡树

hh 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[...

29910
来自专栏用户2442861的专栏

python 中 常用到的 numpy 函数 整理

http://blog.csdn.net/timidsmile/article/details/16963699

822
来自专栏机器学习之旅

tf.scan 记录

tf.scan(fn, elems, initializer=None, parallel_iterations=10, back_prop=True, swa...

1322

扫码关注云+社区

领取腾讯云代金券