카테고리 없음

[C++] 달팽이 배열 만들기

s뽈록이s 2013. 9. 23. 10:40
#define xx	4
#define yy	5

void main()
{
	int arr[yy][xx] = {0};
	int su = 1, to[2] = {0};
	int cnt;
	int x = 0, y = 0;
	
	for(cnt = 0; cnt < (xx * yy); cnt++)
	{
		arr[y][x] = cnt + 1;
		if((to[0] == 0) && (to[1] == 0))	// x방향 증가
		{
			x++;
			if((x == xx) || (arr[y][x] != 0))
			{
				x--;
				cnt--;
				to[0] = 1;
				to[1] = 0;
			}
		}
		else if((to[0] == 1) && (to[1] == 0))	// y방향 증가
		{
			y++;
			if((y == yy) || (arr[y][x] != 0))
			{
				y--;
				cnt--;
				to[0] = 0;
				to[1] = 1;
			}
		}
		else if((to[0] == 0) && (to[1] == 1))	// x방향 감소
		{
			x--;
			if((x == -1) || (arr[y][x] != 0))
			{
				x++;
				y--;
				to[0] = 1;
				to[1] = 1;
			}
		}
		else if((to[0] == 1) && (to[1] == 1))	// y방향 감소
		{
			y--;
			if(arr[y][x] != 0)
			{
				y++;
				x++;
				to[0] = 0;
				to[1] = 0;
			}
		}
	}

	for(cnt = 0; cnt < (xx * yy); cnt++)
	{
		x = cnt % xx;
		y = cnt / xx;
		if(((cnt % xx) == 0) && (cnt != 0))cout << endl;
		cout << arr[y][x] << "\t";
	}
	cout << endl;
}

프로그램 실행화면


달팽이 배열을 만들어주는 프로그램이다. #define xx, yy를 통해 배열의 크기를 조절해 줄 수 있다. 알고리즘은 사람이 그려나가는 것과 비슷하다.


오른쪽으로 이동 하다가 벽을 만나면 밑으로 가고 또 벽을 만나면 왼쪽으로 벽으 만나면 위쪽으로 그리고 또 벽을 만나면 오른쪽으로 증가한다. 이를 xx * yy번 반복하면 된다.


더 효율적인 알고리즘이 있는지는 모르겠지만 내 알고리즘은 이렇다. 배열의 크기도 지정해 줄 수 있어 유연한 프로그램이라 생각된다.