基础练习 回形取数

一世执手 提交于 2020-02-08 01:11:37

问题描述

  回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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 <stdio.h>
#include <cstring>
int main(){
	int m,n;
	scanf("%d%d",&m,&n);
	int num[205][205];
	memset(num,-1,sizeof(num));//数组初始化
	for(int i=0;i<m;i++){
		for(int j=0;j<n;j++){
			scanf("%d",&num[i][j]);
		}
	} 
	int sum=0,x=-1,y=0;
	while(sum<m*n){
		while(x+1<m&&num[x+1][y]!=-1){//向下读数 
			printf("%d ",num[++x][y]);
			num[x][y]=-1;
			sum++;
		}
		while(y+1<n&&num[x][y+1]!=-1){//向 -> 读数 
			printf("%d ",num[x][++y]);
			num[x][y]=-1;
			sum++;
		}
		while(x-1>=0&&num[x-1][y]!=-1){//向上 
			printf("%d ",num[--x][y]);
			num[x][y]=-1;
			sum++;
		} 
		while(y-1>=0&&num[x][y-1]!=-1){//向 <- 
			printf("%d ",num[x][--y]);
			num[x][y]=-1;
			sum++;
		}
	}
	return 0;
} 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!