/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;
}