회원가입
로그인
Toggle navigation
문제
문제
전체 문제
문제 출처
단계별로 풀어보기
알고리즘 분류
추가된 문제
문제 순위
문제
푼 사람이 한 명인 문제
아무도 못 푼 문제
최근 제출된 문제
최근 풀린 문제
랜덤
출처
ICPC
Olympiad
한국정보올림피아드
한국정보올림피아드시․도지역본선
전국 대학생 프로그래밍 대회 동아리 연합
대학교 대회
카카오 코드 페스티벌
Coder's High
ICPC
Regionals
World Finals
Korea Regional
Africa and the Middle East Regionals
Europe Regionals
Latin America Regionals
North America Regionals
South Pacific Regionals
문제집
대회
2
채점 현황
랭킹
게시판
그룹
더 보기
재채점 기록
블로그
강의
실험실
도움말
BOJ Stack
BOJ Book
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
solved.ac
글쓰기
질문 도움말
자주묻는 질문
54%까지돌아가는데 틀렸다고하네요 안되는 테스트케이스가 무엇이 있을까요? ㅠㅠ
13460번 - 구슬 탈출 2
sm970124
6년 전
0
도저히 어디가 틀린지 모르겠네요 ㅠㅠ
#include<stdio.h> char c[11][11]; int n, m, ry, rx, by, bx, dab = 100;//n은세로m은가로 void bt(int num, int rrx, int rry, int bbx, int bby, int bang) { int i, xx[5] = { 0,1,0,-1,0 }, yy[5] = { 0,0,1,0,-1 }, RX, RY, BX, BY, RO = 0, BO = 0, j, k; if (dab <= num) { return; } if (num == 10) { return; } for (i = 1; i <= 4; i++)//홀수는 좌우 짝수는 상하 1오2아3왼4위 { RX = rrx; RY = rry; BX = bbx; BY = bby; RO = 0; BO = 0; if (bang == i)continue; if (i % 2 == 0)//상하 { if (RX == BX) { if (i == 2) { if (RY > BY) { while (c[RY + yy[i]][RX + xx[i]] == '.' || c[RY + yy[i]][RX + xx[i]] == 'O') { if (c[RY + yy[i]][RX + xx[i]] == 'O') { RO = 1; c[RY][RX] = '.'; break; } else { c[RY][RX] = '.'; RY += yy[i]; RX += xx[i]; c[RY][RX] = 'R'; } } while (c[BY + yy[i]][BX + xx[i]] == '.' || c[BY + yy[i]][BX + xx[i]] == 'O') { if (c[BY + yy[i]][BX + xx[i]] == 'O') { BO = 1; c[BY][BX] = '.'; break; } else { c[BY][BX] = '.'; BY += yy[i]; BX += xx[i]; c[BY][BX] = 'B'; } } if (BO == 1) { c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; c[RY][RX] = '.'; c[BY][BX] = '.'; continue; } if (RO == 1) { if (dab > num) { dab = num; } return; } else { if (num == 9)continue; //printf("%d %d %d %d %d %d %d\n", num, RX, RY, BX, BY, dab,i); bt(num + 1, RX, RY, BX, BY, i); for (j = 1; j <= n; j++) { for (k = 1; k <= m; k++) { if (c[j][k] == 'R' || c[j][k] == 'B')c[j][k] = '.'; } } c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; } } else { while (c[BY + yy[i]][BX + xx[i]] == '.' || c[BY + yy[i]][BX + xx[i]] == 'O') { if (c[BY + yy[i]][BX + xx[i]] == 'O') { BO = 1; c[BY][BX] = '.'; break; } else { c[BY][BX] = '.'; BY += yy[i]; BX += xx[i]; c[BY][BX] = 'B'; } } if (BO == 1) { c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; c[RY][RX] = '.'; c[BY][BX] = '.'; continue; } while (c[RY + yy[i]][RX + xx[i]] == '.' || c[RY + yy[i]][RX + xx[i]] == 'O') { if (c[RY + yy[i]][RX + xx[i]] == 'O') { RO = 1; c[RY][RX] = '.'; break; } else { c[RY][RX] = '.'; RY += yy[i]; RX += xx[i]; c[RY][RX] = 'R'; } } if (RO == 1) { if (dab > num) { dab = num; } return; } else { if (num == 9)continue; //printf("%d %d %d %d %d %d %d\n", num, RX, RY, BX, BY, dab,i); bt(num + 1, RX, RY, BX, BY, i); for (j = 1; j <= n; j++) { for (k = 1; k <= m; k++) { if (c[j][k] == 'R' || c[j][k] == 'B')c[j][k] = '.'; } } c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; } } } else { if (RY > BY) { while (c[BY + yy[i]][BX + xx[i]] == '.' || c[BY + yy[i]][BX + xx[i]] == 'O') { if (c[BY + yy[i]][BX + xx[i]] == 'O') { BO = 1; c[BY][BX] = '.'; break; } else { c[BY][BX] = '.'; BY += yy[i]; BX += xx[i]; c[BY][BX] = 'B'; } } if (BO == 1) { c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; c[RY][RX] = '.'; c[BY][BX] = '.'; continue; } while (c[RY + yy[i]][RX + xx[i]] == '.' || c[RY + yy[i]][RX + xx[i]] == 'O') { if (c[RY + yy[i]][RX + xx[i]] == 'O') { RO = 1; c[RY][RX] = '.'; break; } else { c[RY][RX] = '.'; RY += yy[i]; RX += xx[i]; c[RY][RX] = 'R'; } } if (RO == 1) { if (dab > num) { dab = num; } return; } else { if (num == 9)continue; //printf("%d %d %d %d %d %d %d\n", num, RX, RY, BX, BY, dab,i); bt(num + 1, RX, RY, BX, BY, i); for (j = 1; j <= n; j++) { for (k = 1; k <= m; k++) { if (c[j][k] == 'R' || c[j][k] == 'B')c[j][k] = '.'; } } c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; } } else { while (c[RY + yy[i]][RX + xx[i]] == '.' || c[RY + yy[i]][RX + xx[i]] == 'O') { if (c[RY + yy[i]][RX + xx[i]] == 'O') { RO = 1; c[RY][RX] = '.'; break; } else { c[RY][RX] = '.'; RY += yy[i]; RX += xx[i]; c[RY][RX] = 'R'; } } while (c[BY + yy[i]][BX + xx[i]] == '.' || c[BY + yy[i]][BX + xx[i]] == 'O') { if (c[BY + yy[i]][BX + xx[i]] == 'O') { BO = 1; c[BY][BX] = '.'; break; } else { c[BY][BX] = '.'; BY += yy[i]; BX += xx[i]; c[BY][BX] = 'B'; } } if (BO == 1) { c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; c[RY][RX] = '.'; c[BY][BX] = '.'; continue; } if (RO == 1) { if (dab > num) { dab = num; } return; } else { if (num == 9)continue; //printf("%d %d %d %d %d %d %d\n", num, RX, RY, BX, BY, dab,i); bt(num + 1, RX, RY, BX, BY, i); for (j = 1; j <= n; j++) { for (k = 1; k <= m; k++) { if (c[j][k] == 'R' || c[j][k] == 'B')c[j][k] = '.'; } } c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; } } } } else { while (c[BY + yy[i]][BX + xx[i]] == '.' || c[BY + yy[i]][BX + xx[i]] == 'O') { if (c[BY + yy[i]][BX + xx[i]] == 'O') { BO = 1; c[BY][BX] = '.'; break; } else { c[BY][BX] = '.'; BY += yy[i]; BX += xx[i]; c[BY][BX] = 'B'; } } if (BO == 1) { c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; c[RY][RX] = '.'; c[BY][BX] = '.'; continue; } while (c[RY + yy[i]][RX + xx[i]] == '.' || c[RY + yy[i]][RX + xx[i]] == 'O') { if (c[RY + yy[i]][RX + xx[i]] == 'O') { RO = 1; c[RY][RX] = '.'; break; } else { c[RY][RX] = '.'; RY += yy[i]; RX += xx[i]; c[RY][RX] = 'R'; } } if (RO == 1) { if (dab > num) { dab = num; } return; } else { if (num == 9)continue; //printf("%d %d %d %d %d %d %d\n", num, RX, RY, BX, BY, dab,i); bt(num + 1, RX, RY, BX, BY, i); for (j = 1; j <= n; j++) { for (k = 1; k <= m; k++) { if (c[j][k] == 'R' || c[j][k] == 'B')c[j][k] = '.'; } } c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; } } } else//좌우//홀수는 좌우 짝수는 상하 1오2아3왼4위 { if (RY == BY) { if (i == 1) { if (RX > BX) { while (c[RY + yy[i]][RX + xx[i]] == '.' || c[RY + yy[i]][RX + xx[i]] == 'O') { if (c[RY + yy[i]][RX + xx[i]] == 'O') { RO = 1; c[RY][RX] = '.'; break; } else { c[RY][RX] = '.'; RY += yy[i]; RX += xx[i]; c[RY][RX] = 'R'; } } while (c[BY + yy[i]][BX + xx[i]] == '.' || c[BY + yy[i]][BX + xx[i]] == 'O') { if (c[BY + yy[i]][BX + xx[i]] == 'O') { BO = 1; c[BY][BX] = '.'; break; } else { c[BY][BX] = '.'; BY += yy[i]; BX += xx[i]; c[BY][BX] = 'B'; } } if (BO == 1) { c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; c[RY][RX] = '.'; c[BY][BX] = '.'; continue; } if (RO == 1) { if (dab > num) { dab = num; } return; } else { if (num == 9)continue; //printf("%d %d %d %d %d %d %d\n", num, RX, RY, BX, BY, dab,i); bt(num + 1, RX, RY, BX, BY, i); for (j = 1; j <= n; j++) { for (k = 1; k <= m; k++) { if (c[j][k] == 'R' || c[j][k] == 'B')c[j][k] = '.'; } } c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; } } else { while (c[BY + yy[i]][BX + xx[i]] == '.' || c[BY + yy[i]][BX + xx[i]] == 'O') { if (c[BY + yy[i]][BX + xx[i]] == 'O') { BO = 1; c[BY][BX] = '.'; break; } else { c[BY][BX] = '.'; BY += yy[i]; BX += xx[i]; c[BY][BX] = 'B'; } } if (BO == 1) { c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; c[RY][RX] = '.'; c[BY][BX] = '.'; continue; } while (c[RY + yy[i]][RX + xx[i]] == '.' || c[RY + yy[i]][RX + xx[i]] == 'O') { if (c[RY + yy[i]][RX + xx[i]] == 'O') { RO = 1; c[RY][RX] = '.'; break; } else { c[RY][RX] = '.'; RY += yy[i]; RX += xx[i]; c[RY][RX] = 'R'; } } if (RO == 1) { if (dab > num) { dab = num; } return; } else { if (num == 9)continue; //printf("%d %d %d %d %d %d %d\n", num, RX, RY, BX, BY, dab,i); bt(num + 1, RX, RY, BX, BY, i); for (j = 1; j <= n; j++) { for (k = 1; k <= m; k++) { if (c[j][k] == 'R' || c[j][k] == 'B')c[j][k] = '.'; } } c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; } } } else { if (RX > BX) { while (c[BY + yy[i]][BX + xx[i]] == '.' || c[BY + yy[i]][BX + xx[i]] == 'O') { if (c[BY + yy[i]][BX + xx[i]] == 'O') { BO = 1; c[BY][BX] = '.'; break; } else { c[BY][BX] = '.'; BY += yy[i]; BX += xx[i]; c[BY][BX] = 'B'; } } if (BO == 1) { c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; c[RY][RX] = '.'; c[BY][BX] = '.'; continue; } while (c[RY + yy[i]][RX + xx[i]] == '.' || c[RY + yy[i]][RX + xx[i]] == 'O') { if (c[RY + yy[i]][RX + xx[i]] == 'O') { RO = 1; c[RY][RX] = '.'; break; } else { c[RY][RX] = '.'; RY += yy[i]; RX += xx[i]; c[RY][RX] = 'R'; } } if (RO == 1) { if (dab > num) { dab = num; } return; } else { if (num == 9)continue; //printf("%d %d %d %d %d %d %d\n", num, RX, RY, BX, BY, dab,i); bt(num + 1, RX, RY, BX, BY, i); for (j = 1; j <= n; j++) { for (k = 1; k <= m; k++) { if (c[j][k] == 'R' || c[j][k] == 'B')c[j][k] = '.'; } } c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; } } else { while (c[RY + yy[i]][RX + xx[i]] == '.' || c[RY + yy[i]][RX + xx[i]] == 'O') { if (c[RY + yy[i]][RX + xx[i]] == 'O') { RO = 1; c[RY][RX] = '.'; break; } else { c[RY][RX] = '.'; RY += yy[i]; RX += xx[i]; c[RY][RX] = 'R'; } } while (c[BY + yy[i]][BX + xx[i]] == '.' || c[BY + yy[i]][BX + xx[i]] == 'O') { if (c[BY + yy[i]][BX + xx[i]] == 'O') { BO = 1; c[BY][BX] = '.'; break; } else { c[BY][BX] = '.'; BY += yy[i]; BX += xx[i]; c[BY][BX] = 'B'; } } if (BO == 1) { c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; c[RY][RX] = '.'; c[BY][BX] = '.'; continue; } if (RO == 1) { if (dab > num) { dab = num; return; } } else { if (num == 9)continue; //printf("%d %d %d %d %d %d %d\n", num, RX, RY, BX, BY, dab,i); bt(num + 1, RX, RY, BX, BY, i); for (j = 1; j <= n; j++) { for (k = 1; k <= m; k++) { if (c[j][k] == 'R' || c[j][k] == 'B')c[j][k] = '.'; } } c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; } } } } else { while (c[BY + yy[i]][BX + xx[i]] == '.' || c[BY + yy[i]][BX + xx[i]] == 'O') { if (c[BY + yy[i]][BX + xx[i]] == 'O') { BO = 1; c[BY][BX] = '.'; break; } else { c[BY][BX] = '.'; BY += yy[i]; BX += xx[i]; c[BY][BX] = 'B'; } } if (BO == 1) { c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; c[RY][RX] = '.'; c[BY][BX] = '.'; continue; } while (c[RY + yy[i]][RX + xx[i]] == '.' || c[RY + yy[i]][RX + xx[i]] == 'O') { if (c[RY + yy[i]][RX + xx[i]] == 'O') { RO = 1; c[RY][RX] = '.'; break; } else { c[RY][RX] = '.'; RY += yy[i]; RX += xx[i]; c[RY][RX] = 'R'; } } if (RO == 1) { if (dab > num) { dab = num; return; } } else { if (num == 9)continue; //printf("%d %d %d %d %d %d %d\n", num, RX, RY, BX, BY, dab,i); bt(num + 1, RX, RY, BX, BY, i); for (j = 1; j <= n; j++) { for (k = 1; k <= m; k++) { if (c[j][k] == 'R' || c[j][k] == 'B')c[j][k] = '.'; } } c[rry][rrx] = 'R'; c[bby][bbx] = 'B'; } } } } } int main() { int i, j; scanf("%d %d", &n, &m); for (i = 1; i <= n; i++) { scanf("\n"); for (j = 1; j <= m; j++) { scanf("%1c", &c[i][j]); if (c[i][j] == 'B') { by = i; bx = j; } else if (c[i][j] == 'R') { rx = j; ry = i; } } } bt(0, rx, ry, bx, by, 0); if (dab == 100)printf("-1"); else { printf("%d", dab+1); } return 0; }
댓글을 작성하려면
로그인
해야 합니다.
sm970124 6년 전
도저히 어디가 틀린지 모르겠네요 ㅠㅠ