profile image

L o a d i n g . . .

문제 : 개미는 오른쪽으로 움직이다가 벽을 만나면 아래쪽으로 움직여 가장 빠른 길로 움직인다.
(오른쪽에 길이 나타나면 다시 오른쪽으로 움직인다.)

미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고, 먹이가 2로 주어질 때, 성실한 개미의 이동 경로를 예상해보자.

단, 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우, 먹이를 찾은 경우에는 더이상 이동하지 않고 그 곳에 머무른다고 가정한다.

미로 상자의 테두리는 모두 벽으로 되어 있으며, 개미집은 반드시 (2, 2)에 존재하기 때문에 개미는 (2, 2)에서 출발한다.

 

정답 :

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
	int arr[10][10];
	int m = 1, n = 1;

	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			scanf("%d ", &arr[i][j]);
		}
	}

	while (1)
	{
		if (arr[m][n] == 0)
			arr[m][n] = 9;

		else if (arr[m][n] == 2)
		{
			arr[m][n] = 9;
			break;
		}
			
		


		if ((m == 9 && n == 9) || (arr[m][n + 1] == 1 && arr[m + 1][n] == 1))
			break;


		if (arr[m][n + 1] != 1)
			n++;

		else if (arr[m + 1][n] != 1)
			m++;

	}

	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

	return 0;

}

먼저 10*10 크기의 배열을 선언하고, for 문을 중첩해 10*10 크기의 미로 상자의 구조를 입력받는다.

그리고 개미집의 위치를 m=1, n=1로 지정해 준 다음 while 문을 통해 m, n을 이동해준다.

 

while 문에서는 먼저 현재 배열 값이 0일 경우 9로 변경해주고, 마찬가지로 2일 경우엔 9로 변경한 다음 반복문을 탈출한다.

그리고 if 문을 통해 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움질일 수 없는 경우엔 반복문을 탈출시킨다.

또 현재 위치에서 오른쪽이 1(벽 또는 장애물)이 아닌 경우 오른쪽으로 이동하고, 그렇지 않고 아래쪽이 1이 아닐 경우엔 아래쪽으로 이동시킨다.

 

마지막엔 for 문을 중첩해 10*10 크기의 미로 상자를 출력한다.

복사했습니다!