蓝桥杯—BASIC-25 回形取数
2024-08-24 13:04:34
题目:
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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 ;
}
最新文章
- codevs 2830 蓬莱山辉夜
- web前端基础知识 - Django进阶
- 链表的Java实现
- hihoCoder #1388 : Periodic Signal ( 2016 acm 北京网络赛 F题)
- 关于 Android导出apk时碰到的[Unable to execute dex: Multiple dex files define]
- POJ 2342 (树形DP)
- HDU 5464 ( Clarke and problem ) (dp)
- 三分钟教你学Git(十六) - 统计
- Katalon Studio之swagger中的API导入
- text——文本属性大全
- xpath json操作符说明
- Java中的强引用和弱引用
- 现在使用Nginx实现TCP反向代理
- 【redis专题(4)】命令语法介绍之sorted_set
- Android 使alertDialog.builder不会点击外面和按返回键消失
- 查看Jira 使用的H2数据库 数据结构以及内容的方法
- AdaBoost原理详解
- 安装 jemalloc for mysql
- SimpleDateFormat,Calendar 线程非安全的问题
- python3的下载与安装