C++

숫자입력해 달팽이 배열

나른한여우 2024. 12. 21. 21:18
#include <iostream>
using namespace std;
#include <iomanip>

int list[100][100];
int inputdata;

void printList(int inputdata)
{
	for (int i = 0; i < inputdata; i++)
	{
		for (int j = 0; j < inputdata; j++)
		{
			cout << setfill('0') << setw(2) << list[i][j] << " ";
		}
		cout << endl;
	}
}

enum {
	RIGHT = 0,
	DOWN = 1,
	LEFT = 2,
	UP = 3,
};

bool CanGo(int x, int y)
{
	if (x < 0 || x >= inputdata)
		return false;
	if (y < 0 || y >= inputdata)
		return false;
	if (list[x][y] != 0)
		return false;

	return true;
}

void buildList(int inputdata)
{
	int x = 0, y = 0;
	int total = 1;
	int dir = RIGHT;
	int dx[] = { 0, 1, 0, -1 };
	int dy[] = { 1, 0, -1, 0 };

	while (true)
	{
		list[x][y] = total;

		if (total == inputdata * inputdata)
			break;

		int nextX = x + dx[dir];
		int nextY = y + dy[dir];

		if (CanGo(nextX, nextY))
		{
			x = nextX;
			y = nextY;
			total++;
		}
		else
		{
			dir = (dir + 1) % 4;
		}
	}
}

int main()
{
	cin >> inputdata;

	buildList(inputdata);
	printList(inputdata);

	return 0;
}