2014-11-24 5 views
-1

내가 SWI - 프롤로그에서 9 × 9 스도쿠 퍼즐을 해결하기 위해 노력하고있어와 "거짓"하지만 오류에게 그것을 제공하지 않습니다 단순히 "거짓"이라고 진술합니다.프롤로그 : 나는 빈 스도쿠 인 쿼리를 준</p> <p>, 쿼리

코드도 올바르게 컴파일됩니다.

:- use_module(library(clpfd)). 

valid([]). 
valid([Head|Tail]) :- 
    all_different(Head), 
    valid(Tail). 

sudoku(Puzzle, Solution) :- 
    Solution = Puzzle, 
    Puzzle = [S11, S12, S13, S14, S15, S16, S17, S18, S19, 
      S21, S22, S23, S24, S25, S26, S27, S28, S29, 
      S31, S32, S33, S34, S35, S36, S37, S38, S39, 
      S41, S42, S43, S44, S45, S46, S47, S48, S49, 
      S51, S52, S53, S54, S55, S56, S57, S58, S59, 
      S61, S62, S63, S64, S65, S66, S67, S68, S69, 
      S71, S72, S73, S74, S75, S76, S77, S78, S79, 
      S81, S82, S83, S84, S85, S86, S87, S88, S89, 
      S91, S92, S93, S94, S95, S96, S97, S98, S99],   

    Puzzle ins 1..9, 

    Row1 = [S11, S12, S13, S14, S15, S16, S17, S18, S19], 
    Row2 = [S21, S22, S23, S24, S25, S26, S27, S28, S29], 
    Row3 = [S31, S32, S33, S34, S35, S36, S37, S38, S39], 
    Row4 = [S41, S42, S43, S44, S45, S46, S47, S48, S49], 
    Row5 = [S51, S52, S53, S54, S55, S56, S57, S58, S59], 
    Row6 = [S61, S62, S63, S64, S65, S66, S67, S68, S69], 
    Row7 = [S71, S72, S73, S74, S75, S76, S77, S78, S79], 
    Row8 = [S81, S82, S83, S84, S85, S86, S87, S88, S89], 
    Row9 = [S91, S92, S93, S94, S95, S96, S97, S98, S99], 

    Col1 = [S11, S21, S31, S41, S51, S61, S71, S81, S91], 
    Col2 = [S21, S22, S32, S42, S52, S62, S72, S82, S92], 
    Col3 = [S31, S32, S33, S43, S53, S63, S73, S83, S93], 
    Col4 = [S41, S42, S43, S44, S54, S64, S74, S84, S94], 
    Col5 = [S51, S52, S53, S54, S55, S65, S75, S85, S95], 
    Col6 = [S61, S62, S63, S64, S65, S66, S76, S86, S96], 
    Col7 = [S71, S72, S73, S74, S75, S76, S77, S87, S97], 
    Col8 = [S81, S82, S83, S84, S85, S86, S87, S88, S98], 
    Col9 = [S91, S92, S93, S94, S95, S96, S97, S98, S99], 

    Square1 = [S11, S12, S13, S21, S22, S23, S31, S32, S33], 
    Square2 = [S14, S15, S16, S24, S25, S26, S34, S35, S36], 
    Square3 = [S17, S18, S19, S27, S28, S29, S37, S38, S39], 
    Square4 = [S41, S42, S43, S51, S52, S53, S61, S62, S63], 
    Square5 = [S44, S45, S46, S54, S55, S56, S64, S65, S66], 
    Square6 = [S47, S48, S49, S57, S58, S59, S67, S68, S69], 
    Square7 = [S71, S72, S73, S81, S82, S83, S91, S92, S93], 
    Square8 = [S74, S75, S76, S84, S85, S86, S94, S95, S96], 
    Square9 = [S77, S78, S79, S87, S88, S89, S97, S98, S99], 

    valid([Row1, Row2, Row3, Row4, Row5, Row6, Row7, Row8, Row9, 
     Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, 
     Square1, Square2, Square3, Square4, Square5, Square6, Square7, Square8, Square9]). 

을 내 쿼리는 다음과 같습니다 :

내 코드는 다음과 같다 내가 코드 수많은 시간을 reviewd, 그리고 그것이 사실 반환하지 왜 아무 생각했습니다

sudoku([_, 9, 6, 8, 5, 1, _, 4, _, 
      1, _, 8, 2, 9, 4, 3, 5, 6, 
      5, 2, _, 6, _, _, 8, _, 1, 
      9, _, 5, _, 8, 7, 2, 6, 3, 
      4, 8, 3, 9, _, 6, 5, _, 7, 
      _, 6, 7, 3, 1, _, 9, 8, 4, 
      6, 5, _, 1, 3, 8, _, 7, 9, 
      7, 4, 9, 5, 6, 2, 1, _, 8, 
      _, 3, 1, 7, _, 9, _, 2, 5], 
Solution). 

.

+0

아마도 그 인스턴스는 해결할 수 없습니다. 다른 번호를'_ '로 바꾸어서 스키마를 풀어보십시오. – CapelliC

+0

@CapelliC 나는 그것을 해결할 수 있다고 확신합니다. 어쩌면 내 쿼리 형식이 잘못되었다고 생각하니 제게 "거짓"이라고 생각하니? – marcusvbb

+0

'Colx' 변수가 잘못되었습니다. 그들은 'Col2 = [S12, S22, S32 ...]'를 등록해야하지만 왜'마술사 (all_different, Puzzle), 전치 (Puzzle, T), 매 플리스트 (all_different, T) .... '가 아닌가? – false

답변

1

는 생각

덕분에 어쩌면 당신은 ColX의에 복사/붙여 넣기에 너무 빨리했다. 대부분의 경우 첫 번째와 두 번째 숫자가 바뀌 었습니다. 이것을 시도하십시오 :

Col1 = [S11, S21, S31, S41, S51, S61, S71, S81, S91], 
    Col2 = [S12, S22, S32, S42, S52, S62, S72, S82, S92], 
    Col3 = [S13, S23, S33, S43, S53, S63, S73, S83, S93], 
    Col4 = [S14, S24, S34, S44, S54, S64, S74, S84, S94], 
    Col5 = [S15, S25, S35, S45, S55, S65, S75, S85, S95], 
    Col6 = [S16, S26, S36, S46, S56, S66, S76, S86, S96], 
    Col7 = [S17, S27, S37, S47, S57, S67, S77, S87, S97], 
    Col8 = [S18, S28, S38, S48, S58, S68, S78, S88, S98], 
    Col9 = [S19, S29, S39, S49, S59, S69, S79, S89, S99], 

?- sudoku([_, 9, 6, 8, 5, 1, _, 4, _, 
      1, _, 8, 2, 9, 4, 3, 5, 6, 
      5, 2, _, 6, _, _, 8, _, 1, 
      9, _, 5, _, 8, 7, 2, 6, 3, 
      4, 8, 3, 9, _, 6, 5, _, 7, 
      _, 6, 7, 3, 1, _, 9, 8, 4, 
      6, 5, _, 1, 3, 8, _, 7, 9, 
      7, 4, 9, 5, 6, 2, 1, _, 8, 
      _, 3, 1, 7, _, 9, _, 2, 5], 
Solution). 
Solution = [3, 9, 6, 8, 5, 1, 7, 4, 2|...]. 
+0

고마워. 많은! 그래, 그 생각이 흐르기 시작했을 때 나는 흥분했다. 그리고 자주 그렇게 보았을 때, 나는 터널을 향해 터널을 돌았고 더 이상 숫자를 볼 수 없었다. – marcusvbb