[C언어] 쥐의 이동경로 찾기

Dragony·2019년 12월 11일
0

C언어

목록 보기
3/5

/10X10차원을 갖는 2차원 배열이 있다. 각 자리는 초기자리 [0][0]을 제외하고 모두 0으로 초기화된다.
[0][0]자리에 위치한 쥐가 [9][9] 위치에 있는 치즈를 얻어야 한다.
각 이동 방향은 상하좌우 대각선 까지 포함하여 8방향 이고, 각 방향으로 가는 확률은 서로 다르다.
방문한 곳은 +1을 하기로 하고, 치즈를 얻었을 때 배열을 출력한다.
쥐가 각 모서리에 위치했을 경우를 고려하여, 배열을 [12][12]로 선언하여 가장자리는 -1로 정하기로 한다.
-1가 있는 곳으로 쥐가 오면 다시 제자리로 가서 다시 난수를 발생시켜 움직이도록 한다.
/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {

int arr[12][12];
int i, j;
int row = 1, col = 1; //쥐의 위치
int random_num;//난수

srand((unsigned)time(NULL)); 

//배열 초기화
for (i = 0; i < 12; i++) {
	for (j = 0; j < 12; j++) {
		arr[i][j] = 0;
	}
}
arr[1][1] = 1; //쥐의 초기 자리

//바깥쪽 -1로 초기화
for (i = 0; i < 12; i++) {
	for (j = 0; j < 12; j++) {
		if ((i == 0)||(i == 11)) {
			arr[i][j] = -1;
		}
		if ((j == 0)||(j==11)) {
			arr[i][j] = -1;
		}
		
	}
}

while (1) {
	random_num = rand() % 100 + 1; //1~100까지의 난수 발생. 0이 나오는 경우는 제자리에 있는 경우라 발생하지 않음

	if ((row == 10) && (col == 10))
		break;

	if ((70 <= random_num) && (random_num <= 100)) {
		if (arr[row + 1][col + 1] == -1)
			continue;
		else {
			arr[row + 1][col + 1]++;
			row += 1;
			col += 1;
		}
		
	} //아래 우측 대각선

	if ((50 <= random_num) && (random_num <= 69)) {
		if (arr[row + 1][col] == -1)
			continue;
		else {
			arr[row + 1][col]++;
			row += 1;
		}
	} //아래

	if ((30 <= random_num) && (random_num <= 49)) {
		if (arr[row][col + 1] == -1)
			continue;
		else {
			arr[row][col + 1]++;
			col += 1;
		}
	}//우측

	if ((20 <= random_num) && (random_num <= 29)) {
		if (arr[row + 1][col - 1] == -1)
			continue;
		else {
			arr[row + 1][col - 1]++;
			row += 1;
			col -= 1;
		}
	}//아래 좌측 대각선

	if ((10 <= random_num) && (random_num <= 19)) {
		if (arr[row - 1][col + 1] == -1)
			continue;
		else {
			arr[row - 1][col + 1]++;
			row -= 1;
			col += 1;
		}
	}//위 우측 대각선

	if ((6 <= random_num) && (random_num <= 9)) {
		if (arr[row - 1][col] == -1)
			continue;
		else {
			arr[row - 1][col]++;
			row -= 1;
		}
	}//위

	if ((2 <= random_num) && (random_num <= 5)) {
		if (arr[row][col - 1] == -1)
			continue;
		else {
			arr[row][col - 1]++;
			col -= 1;
		}
	}//왼쪽

	if ((1 <= random_num) && (random_num <= 2)) {
		if (arr[row - 1][col - 1] == -1)
			continue;
		else {
			arr[row - 1][col - 1]++;
			row -= 1;
			col -= 1;
		}
	}//좌측 위 대각선
}

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

return 0;

}

profile
안녕하세요 :) 제 개인 공부 정리 블로그입니다. 틀린 내용 수정, 피드백 환영합니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN