博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础练习 回形取数 C语言 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
阅读量:3960 次
发布时间:2019-05-24

本文共 1705 字,大约阅读时间需要 5 分钟。

问题描述

回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。

输入格式
  输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出格式
  输出只有一行,共m×n个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
例子
输入

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
int down(int a[200][200], int i, int j,int m) {
//方向向下判断 if (i < m - 1) {
if (a[i + 1][j] == -1) //如果下一个数据已经去过 return 0; else return 1; } else if (i == m - 1) //如果到达数组边界 return 0; else return 1;}int right(int a[200][200], int i, int j, int n) {
if (j == n - 1) return 0; else if (j < n) {
if (a[i][j + 1] == -1) return 0; else return 1; }}int up(int a[200][200], int i, int j) {
if (i == 0) return 0; else if (a[i - 1][j] == -1) return 0; else return 1;}int left(int a[200][200], int i, int j) {
if (j == 0) return 0; else if (a[i][j - 1] == -1) return 0; else return 1;}int main() {
int a[200][200]; int i, j; int m, n; scanf("%d%d", &m, &n); for (i = 0; i < m; i++) for (j = 0; j < n; j++) scanf("%d", &a[i][j]); i = 0; j = 0; while (m!=1 || n!=1) {
for (; down(a, i, j, m); i++) {
printf("%d ", a[i][j]); a[i][j] = -1;//将去过的数据设置标记即-1 } if (a[i][j + 1] == -1) break; for (; right(a, i, j, n); j++) {
printf("%d ", a[i][j]); a[i][j] = -1; } if (a[i - 1][j] == -1) break; for (; up(a, i, j); i--) {
printf("%d ", a[i][j]); a[i][j] = -1; } if (a[i][j - 1] == -1) break; for (; left(a, i, j); j--) {
printf("%d ", a[i][j]); a[i][j] = -1; } if (a[i + 1][j] == -1) break; } printf("%d", a[i][j]); return 0;}

代码很简单,只是略显繁琐,并且细节很容易出错。

运行示例

在这里插入图片描述

转载地址:http://znrzi.baihongyu.com/

你可能感兴趣的文章
这个世界上肯定有另一个我,做着我不敢做的事,过着我想过的生活 | MixAI 知识库 No.70...
查看>>
表情包数据挖掘 | Mix群聊
查看>>
如何阅读科研论文
查看>>
理解本真的REST架构风格
查看>>
10款免费且开源的项目管理工具
查看>>
java调用javascript :js引擎rhino
查看>>
asp 中常用的文件处理函数
查看>>
ADO中sqlserver存储过程使用
查看>>
Linux KernelTech版FAQ 1.0
查看>>
ntfs分区iis故障的解决
查看>>
个人创业“六大死穴”
查看>>
最重要的 12个 J2EE 最佳实践
查看>>
通过Java Swing看透MVC设计模式
查看>>
Java 理论与实践: 关于异常的争论
查看>>
编写高效的线程安全类
查看>>
提高Java代码可重用性的三个措施
查看>>
编写跨平台Java程序注意事项
查看>>
富人和穷人的12个经典差异
查看>>
java 注意事项[教学]
查看>>
MetaWeblogAPI测试
查看>>