蓝桥杯_回型取数

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

思路: 
以下——>左——>上——>右为读数规律,控制下标增减完成输出。

一开始想到的是搜索,emmm好像想复杂了...

#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>
#include<string>
using namespace std;

int matrix[200][200]; 
int m, n;
bool in(int x, int y)
{
	return x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] != -1;
}

int main()
{
	cin >> m >> n;
	for(int i = 0; i < m; ++i)
		for(int j = 0; j < n; ++j)
			cin >> matrix[i][j];
	int x = 0, y = 0, cur = 0; 
	while(cur < m*n)
	{ 
		while(in(x, y))
		{
			cur++;
			cout << matrix[x][y] << ' ';
			matrix[x][y] = -1;
			x++;	
		}
		x--;
		y++;
		while(in(x, y))
		{
			cur++;
			cout << matrix[x][y] << ' ';
			matrix[x][y] = -1;
			y++;	
		}
		y--;
		x--;
		while(in(x, y))
		{
			cur++;
			cout << matrix[x][y] << ' ';
			matrix[x][y] = -1;
			x--;
		}
		x++;
		y--;
		while(in(x, y))
		{
			cur++;
			cout << matrix[x][y] << ' ';
			matrix[x][y] = -1;
			y--; 	
		}
		y++;
		x++;
	}
	
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41282102/article/details/88370550
今日推荐