2012-12-12 4 views
8

스도쿠 퍼즐을 생성하는 데 가능한 고유 한 방법은 몇 가지가 있습니까? 내가 생각할 수있는 방법은 두 가지뿐입니다. 1) 해결 된 스도쿠 퍼즐을 가지고 행과 열을 뒤섞습니다. 2) 임의의 숫자를 생성하고 모든 스도쿠 제약 조건을 위반하는지 확인합니다. 모든 수가 스도쿠 제한 조건을 위반하지 않을 때까지 반복합니다. 사각형 (이론적으로는 가능하지만 일반적으로 교착 상태가됩니다)스도쿠 퍼즐을 생성하는 독특한 방법

다른 방법이 있습니까?

답변

21

Here은 20 페이지의 PDF로, "스도쿠 퍼즐 생성 : 이드에서 악마로"라는 제목으로, 당신은 아마도 당신의 탐구에서 유용하다고 생각할 것입니다. 다른 방법이

있습니다

귀하의 질문에 대답하려면?

예. 네, 있습니다.

-2

이렇게하면됩니다.

void genSudokuBoard(int grid[ ], int display[ ]){ 
int i,c, j, rowNum, colNum, blockNum; 

for(c=0; c<N*N; c++) { 
    blockNum = colNum = 1; 
    //rowNum = c/N; 
    //colNum = c % N; 
    //blockNum = (rowNum/3) * 3 + (colNum/3); 
    for (j=0; j<N; j++) 
    printf("%d", grid[((blockNum/3)*N*3) + (colNum/3)*3 + (j/3)*N + j%3]); 
    } 


printf("\n"); 
for(i=0; i<N*N; i++) { /* displaying all N*N numbers in the 'grid' array */ 

    if(i%N==0 && i!=0) { /* printing a newline for every multiple of N */ 
    printf("\n"); 
    } 
    printf("%d ", grid[i]); 
} 
printf("\n"); 

return 0; 

}는 해결 Sudoko 퍼즐을 가지고까지 생성 할 수

-2

간단한 방법 1 단계) I 9까지 B와 A,이 모든 일을 대체, 2 단계) 셔플을 1과 3 사이의 무작위를 사용하는 각 수평 및 수직 블록 블록은 여기에 각각 3 가지 가능한 조합 만있을 수 있습니다. 3) 이제 셔플 블록을 3 번 수직 및 3 번 셔플로 사용할 수 있습니다. 4) 블록을 1에서 4 번 회전합니다. 5) 1과 2 사이의 무작위로 수직 및 수평으로 퍼즐을 거울로 그립니다. 단계 6) 모든 A를 1에서 9로 바꾸십시오 ..

이것은 약 38,093,690,880 콤보를 생성합니다.