#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int A[65][65];
int B[65][65];
int Visited[65][65][4];
int H, W, R, C, D = 0;
int i, j, k, count = 0, loop = 0;
scanf("%d %d", &H, &W);
scanf("%d %d %d", &R, &C, &D);
for (i = 0; i < H; i++) {
for (j = 0; j < W; j++) {
scanf("%1d", &A[i][j]);
if (j == (W - 1)) {
continue;
}
}
}
for (i = 0; i < H; i++) {
for (j = 0; j < W; j++) {
scanf("%1d", &B[i][j]);
if (j == (W - 1)) {
continue;
}
}
}//규칙표 입력
for (i = 0; i < H; i++) {
for (j = 0; j < W; j++) {
for (k = 0; k < 4; k++) {
Visited[i][j][k] = 0;
}
}
}//초기화
int result;
for (loop = 1; loop <= 65 * 65 * 5; loop++) {
D = (D + A[R][C]) % 4; //서있는 위치에서 회전
if (D == 0) { //현재 서있는 위치의 방향정보
--R; //up
if (R < 0) {
result = loop;
count++;
break; //배열 탈출 조건
}
else if (Visited[R][C][D] == 1) {
count++;
Visited[R][C][D]++;
continue;
}
else if ((Visited[R][C][D] == 2) && (count /= 0)) {
count++;
result = loop;
break;
}
else {
Visited[R][C][D] = 1; //흔적 표시
A[R][C] = B[R][C];
count = 0;
continue;
}
}
if (D == 1) { //현재 서있는 위치의 방향정보
++C; //forward
if (C >= W) {
count++;
result = loop;
break; //배열 탈출 조건
}
else if (Visited[R][C][D] == 1) {
count++;
Visited[R][C][D]++;
continue;
}
else if ((Visited[R][C][D] == 2) && (count /= 0)) {
count++;
result = loop;
break;
}
else {
Visited[R][C][D] = 1; //흔적 표시
A[R][C] = B[R][C];
count = 0;
continue;
}
}
if (D == 2) { //현재 서있는 위치의 방향정보
++R; //down
if (R >= H) {
count++;
result = loop;
break; //배열 탈출 조건
}
else if (Visited[R][C][D] == 1) {
count++;
Visited[R][C][D]++;
continue;
}
else if ((Visited[R][C][D] == 2) && (count /= 0)) {
count++;
result = loop;
break;
}
else {
Visited[R][C][D] = 1; //흔적 표시
A[R][C] = B[R][C];
count = 0;
continue;
}
}
if (D == 3) { //현재 서있는 위치의 방향정보
--C; //forward
if (C < 0) {
count++;
result = loop;
break; //배열 탈출 조건
}
else if (Visited[R][C][D] == 1) {
count++;
Visited[R][C][D]++;
continue;
}
else if ((Visited[R][C][D] == 2) && (count /= 0)) {
count++;
result = loop;
break;
}
else {
Visited[R][C][D] = 1; //흔적 표시
A[R][C] = B[R][C];
count = 0;
continue;
}
}
}
printf("%d", result - count);
return 0;
}
할 수 있는건 다 한거같은데 출력값이 참 요상하게 뜸.. 어딜 뜯어고쳐야할까
댓글 0