abrahamkim98   1년 전

아래의 스도쿠 사이트에 들어가서 이 코드로 20단계를 몇번 풀어보았는데 모두 정답이 나왔습니다.

http://www.sudoku99.co.kr/sudo...

아래는 그 중 한문제 입니다...

previewpreview

물론 계시판의 반례 또한 잘 실행되었습니다.

하지만 코드 제출결과 2%에서 계속 틀렸습니다가 나오는데, 혹시 어떤 부분에서 논리적 오류가 있을지 짐작가시는 부분이 있으실까요??

혹은 해당 코드에 대한 반례를 알고계신분은 알려주시면 정말 감사하겠습니다 ㅜㅜ

코드는 조금 길긴한데, dfs()함수를 제외하면 Table을 확인하고, 초기화하는 함수여서 해석하시는데 큰 어려움이 없으실 것 같습니다.

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

코드설명  

1. 변수(배열)

-- blank[i][j]

: 처음 Table에 입력된 수를 참고했을 때 Table[i][j]에 들어갈 수 있는 값들이 들어 있다.

-- connect[i][j]

: Table[i][j]에 어떤 값이 입력되었을 때, 영향을 받게 되는 Table의 위치가 기록되어 있다.

ex)

0 2 0 9 0 5 0 0 0

5 9 0 0 3 0 2 0 0

7 0 0 6 0 2 0 0 5

0 0 9 3 5 0 4 6 0

0 5 4 0 0 0 7 8 0

0 8 3 0 2 7 5 0 0

8 0 0 2 0 9 0 0 4

0 0 5 0 4 0 0 2 6

0 0 0 5 0 3 0 7 0

위에서 connect[0][0]에는 {0, 2}, {0, 4}, ... {1, 2}, {2, 1}, {2, 2}, {3, 0}, {4, 0}, ...이 저장되어 있다.

2. 함수

-- input_num()

: blank와 connect배열을 초기화하는 함수이다.

-- check_blank(i, j, num)

: 스도쿠의 규칙을 적용했을 때, Table[i][j]에 num을 놓을 수 있는지 확인하는 함수이다.

-- dfs()

:위의 함수와 배열을 활용해 스도쿠를 채워가는 함수이다.

댓글을 작성하려면 로그인해야 합니다.