题目:
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
输入格式
  输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出格式
  输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5
样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2

分析:依次按顺序遍历左列下行右列上行,设置一个二维数组记录已经访问过的数,访问过就不再访问

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAX_N = +;
int a[MAX_N][MAX_N];
int b[MAX_N * MAX_N + ];
int c[MAX_N][MAX_N];
int main() {
int m, n;
while(scanf("%d%d", &m, &n) == ) {
for(int i = ; i < m; i++) {
for(int j = ; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
memset(c, , sizeof(c));
     int x = -, y = ;
int d = ;
while(d < n*m) {
while(x < m- && !c[x+][y]) { b[d++] = a[++x][y]; c[x][y] = ; }
while(y < n- && !c[x][y+]) { b[d++] = a[x][++y]; c[x][y] = ; }
while(x > && !c[x-][y]) { b[d++] = a[--x][y]; c[x][y] = ; }
while(y > && !c[x][y-]) { b[d++] = a[x][--y]; c[x][y] = ; }
}
for(int j = ; j < d-; j++) printf("%d ", b[j]);
printf("%d\n", b[d-]);
}
return ;
}

最新文章

  1. codevs 2830 蓬莱山辉夜
  2. web前端基础知识 - Django进阶
  3. 链表的Java实现
  4. hihoCoder #1388 : Periodic Signal ( 2016 acm 北京网络赛 F题)
  5. 关于 Android导出apk时碰到的[Unable to execute dex: Multiple dex files define]
  6. POJ 2342 (树形DP)
  7. HDU 5464 ( Clarke and problem ) (dp)
  8. 三分钟教你学Git(十六) - 统计
  9. Katalon Studio之swagger中的API导入
  10. text——文本属性大全
  11. xpath json操作符说明
  12. Java中的强引用和弱引用
  13. 现在使用Nginx实现TCP反向代理
  14. 【redis专题(4)】命令语法介绍之sorted_set
  15. Android 使alertDialog.builder不会点击外面和按返回键消失
  16. 查看Jira 使用的H2数据库 数据结构以及内容的方法
  17. AdaBoost原理详解
  18. 安装 jemalloc for mysql
  19. SimpleDateFormat,Calendar 线程非安全的问题
  20. python3的下载与安装

热门文章

  1. Math.abs(~2020) 按位取反后的绝对值是多少 2021, 按位取反后,比正数多1
  2. python - selenium 2 升级到最新版本
  3. UCS2编码
  4. c# zfc
  5. every day a practice —— morning(4)
  6. java 循环读取文件夹里面的文件
  7. 小程序获取openid 小程序授权
  8. Docker 只要一小时,零基础入门Docker(转)
  9. poj2891 扩展中国剩余定理
  10. react中使用antd Table组件滚动加载数据的实现