【蓝桥杯】【水题】回形取数

版权声明:转载请注明出处~~~ https://blog.csdn.net/lesileqin/article/details/88749835

回形取数

点我打开题目链接

题目描述

回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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

解决问题的时候遇到的问题:

还是太粗心,因为题目是m行n列,看错题了,直接贡献一次WA。

代码如下:

#include<iostream>
using namespace std;
int m,n; //mhang n lie
int num[200][200];
bool book[200][200]={false};
int main()
{
	cin >> m >> n;
	for(int i=0;i<m;i++)
		for(int j=0;j<n;j++)
			cin >> num[i][j];
	int x=0,y=0;
	int ans=m*n;
	int flag=0;
	while(1)
	{
		if(flag==ans)
			break;
		while(x>=0&&x<m&&book[x][y]==false)
		{
			book[x][y]=true;
			cout << num[x][y] << " ";
			flag++;
			x++;
		}
//		cout << x << endl;
		x--,y++;
		while(y>=0&&y<n&&book[x][y]==false)
		{
			book[x][y]=true;
			cout << num[x][y] << " ";
			flag++;
			y++;
		}
		y--,x--;
		while(x>=0&&x<m&&book[x][y]==false)
		{
			book[x][y]=true;
			cout << num[x][y] << " ";
			flag++;
			x--;
		}
		x++,y--;
		while(y>=0&&y<n&&book[x][y]==false)
		{
			book[x][y]=true;
			cout << num[x][y] << " ";
			flag++;
			y--;
		}
		y++,x++;
	//	cout << flag << endl; 
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/lesileqin/article/details/88749835