U E D R , A S I H C RSS

미로찾기/황재선허아영

~cpp 
#include <stdio.h>

#define MAX 7
#define GO 0
#define BLOCKED 1
#define HADGONE 2

int board[MAX][MAX];
int xPos[8] = {1, 1, 0, -1, -1, -1, 0, 1};
int yPos[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int nextX, nextY;
int x = 1;
int y = 1;
int count = 0;
int count2 = 0;

void check()
{
	int i;
	count = 0;
	count2 = 0;
	for(i = 0; i < 8; i++)
	{
		if(board[y+yPos[i]][x+xPos[i]] == GO)
		{
			count++;
			nextX = x+xPos[i];
			nextY = y+yPos[i];
		}
		
		if(board[y+yPos[i]][x+xPos[i]] == HADGONE)
		{
			count2++;
		}
	}
}

void move() 
{
	int i;
	// 주위에 0이 하나있고 2는 없어.
	if (count == 1 && count2 == 0)
	{
		board[y][x] = 1;
		x = nextX;
		y = nextY;
	}// 주위에 0은 하나 있고 2가 있어.
	else if (count == 1 && count2 >= 1)
	{
		board[y][x] = 2;
		x = nextX;
		y = nextY;
	}// 주위에 0이 여러개. 현재 좌표는 2.
	else if (count >= 2) {
		board[y][x] = 2;
		for(i = 0; i < 8; i++)
		{
			if(board[y+yPos[i]][x+xPos[i]] == GO)
			{
				x = x+xPos[i];
				y = y+yPos[i];
				break;
			}
		}
	}
}


void main()
{
	int i, j;
	for(i = 0; i < MAX; i++)
	{
		for (j = 0; j < MAX; j++)
		{
			board[i][j] = 1;
		}
	}
	
	board[1][1] = 0;
	board[1][3] = 0;
	board[1][4] = 0;
	board[1][5] = 0;
	board[2][2] = 0;
	board[2][3] = 0;
	board[2][4] = 0;
	board[3][1] = 0;
	board[3][4] = 0;
	board[3][5] = 0;
	board[4][3] = 0;
	board[5][4] = 0;
	board[5][5] = 0;
	
		
	printf("현재\n(%d,%d)\n", x, y);
	
	while(!(x == 5 && y == 5))
	{
		check();
		move();
		printf("(%d,%d)\n", x, y);
	}
		
	
	for(i = 0; i < MAX; i++)
	{
		for (j = 0; j < MAX; j++)
		{
			printf("%d ", board[i][j]);
		}
		printf("\n");
	}
	
	
	
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:31
Processing time 0.0240 sec