首页 > 学院 > 开发设计 > 正文

基础练习 回形取数

2019-11-08 02:46:15
字体:
来源:转载
供稿:网友

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

解答代码

#include<iostream>#include<string>#include<cstdio>#include<cstring>#include<fstream>#include<cmath>#define N 201using namespace std;int main(){	int i,j,n,m;	int array[N][N];	//freopen("input9.txt","r",stdin);	memset(array,-1,sizeof(array));	scanf("%d%d",&m,&n);	for(i=0;i<m;i++)		for(j=0;j<n;j++)			scanf("%d",&array[i][j]);	int len=n*m;	int sum=0;	i=-1;j=0;	while(sum<len)	{		while(i+1<m &&array[i+1][j]!=-1)		{			PRintf("%d ",array[++i][j]);			array[i][j]=-1;			sum++;		}		while(j+1<n && array[i][j+1]!=-1)		{			printf("%d ",array[i][++j]);			array[i][j]=-1;			sum++;		}		while(i-1>=0 && array[i-1][j]!=-1)		{			printf("%d ",array[--i][j]);			array[i][j]=-1;			sum++;		}		while(j-1>=0 && array[i][j-1]!=-1)		{			printf("%d ",array[i][--j]);			array[i][j]=-1;			sum++;		}	}	return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表