2012-12-12 70 views
8

Có bao nhiêu cách duy nhất có thể có để tạo Câu đố Sudoku ?? Tôi có thể nghĩ chỉ có hai cách có thể 1) Lấy một câu đố Sudoku đã giải quyết và trộn các hàng và cột 2) Tạo một số ngẫu nhiên và kiểm tra xem nó có vi phạm bất kỳ ràng buộc Sudoku hay không, lặp lại số không vi phạm bất kỳ ràng buộc Sudoku nào cho mọi vuông (về lý thuyết có thể nhưng thông thường nó dẫn đến bế tắc)Phương pháp duy nhất để tạo câu đố sudoku

Có cách nào khác không?

Trả lời

21

Here là một tệp 20 trang PDF, có tiêu đề "Tạo câu đố Sudoku: từ Dễ đến ác", mà bạn có thể thấy hữu ích trong nhiệm vụ của mình.

Để trả lời câu hỏi của bạn:

Có cách nào khác?

Có. Có.

-2

Điều này sẽ hiệu quả.

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; 

}

-2

Cách đơn giản để tạo ra lên đến Hãy Sudoko câu đố giải quyết, bước 1) thay thế tất cả 1 với A, 2 với B đến 9 với tôi, Bước 2) làm một shuffle trong mỗi khối khối ngang và dọc sử dụng ngẫu nhiên từ 1 đến 3, ở đây trong mỗi khối chỉ có thể có 3 kết hợp có thể. bước 3) bây giờ trộn các khối chỉ có thể có 3 dọc và 3 ngang shuffle bước 4) xoay khối 1-4 thời gian .. bước 5) phản ánh câu đố theo chiều dọc và chiều ngang bằng cách sử dụng ngẫu nhiên giữa 1 và 2. bước 6) thay thế tất cả A bằng bất kỳ số nào từ 1 đến 9 ..

đoán điều này sẽ tạo ra khoảng 38.093,690,880 combo ....