1938번 - 통나무 옮기기
isRotate는 BBB 에서 중간 B를 중심으로 회전할 수 있는지 체크하는 함수이고
mat이라는 2차원배열은 1과 0만이 있습니다.(B나 E도 0)
visited는 [row 위치][column 위치] [ 방향] 으로 이루어져있습니다.
지도를 입력 받고, 입력받은 BBB의 중간 B의 위치를 큐에 넣고, 처음위치부터 rotate가능한 지 확인한 뒤에
BFS를 실행합니다. 여기서 큐는 row, col, 얼마나 이동했는지(cnt), 수직으로 가는지 평행으로가는지 (chk) 를
각각 요소로 가지고 있는 struct를 원소로 가집니다. BFS가 시작되면 큐의 front()에서 왼쪽 오른쪽 위 아래를 검사하고
방문한 것이 아니면 cnt + 1을 하고, 여기서 rotate 까지 가능하면 cnt + 2를 하여 줍니다.
마지막으로 E와 같은 방향( 수직 or 평행)이면서 E의 중간 지점과 탐색하는 위치가 일치하면 즉시 종료하고, 탐색 중인
cnt를 출력합니다.
https://ideone.com/Lc8cig
디버깅용 printf를 다 지웠을 경우의 반례입니다.
님 정말 감사합니다 ㅜㅜㅜ 사랑합니다!!!!!!!!!!!!!!!!!!!!!!!!
혹시 반례같은 건 어떻게 찾으시는 지 여쭈어도 될까요?
방금은 랜덤 데이터를 만들어서 제 코드와 비교했고, 그냥 아무렇게나 넣다 보면 나오는 경우도 많습니다.
댓글을 작성하려면 로그인해야 합니다.
uiucpass 5년 전
isRotate는 BBB 에서 중간 B를 중심으로 회전할 수 있는지 체크하는 함수이고
mat이라는 2차원배열은 1과 0만이 있습니다.(B나 E도 0)
visited는 [row 위치][column 위치] [ 방향] 으로 이루어져있습니다.
지도를 입력 받고, 입력받은 BBB의 중간 B의 위치를 큐에 넣고, 처음위치부터 rotate가능한 지 확인한 뒤에
BFS를 실행합니다. 여기서 큐는 row, col, 얼마나 이동했는지(cnt), 수직으로 가는지 평행으로가는지 (chk) 를
각각 요소로 가지고 있는 struct를 원소로 가집니다. BFS가 시작되면 큐의 front()에서 왼쪽 오른쪽 위 아래를 검사하고
방문한 것이 아니면 cnt + 1을 하고, 여기서 rotate 까지 가능하면 cnt + 2를 하여 줍니다.
마지막으로 E와 같은 방향( 수직 or 평행)이면서 E의 중간 지점과 탐색하는 위치가 일치하면 즉시 종료하고, 탐색 중인
cnt를 출력합니다.