
要畫一個9X9的數獨,現在通過回圈來檢查某個位置是否為空(0),如果是,所在行、列、九宮格是否已有候選數。
從數字1的第一次開始檢查。每次填到前四個數的其中一個的第九次時,就卡住不繼續了。很迷。
uj5u.com熱心網友回復:
#include <stdio.h>#include <stdlib.h>
#include <time.h>
int main(){
int arr[9][9]={0}; // 規范數獨大小
int i, j; // i:一維下標 j:二維下標
int label_1, label_2, label_3;
// label_1:當前行是否滿足填寫條件 label_2:當前列 label_3:當前九宮格
srand(time(NULL)); // 亂數種子
for (int num=1; num<=9; num++){ // 依次填入數字 1-9
for(int count=1; count<=9; count++){ // 每個數字填入9次
do{
i = rand()%9; // 一維下標
j = rand()%9; // 二維下標
label_1 = 0; // 初始值
label_2 = 0;
label_3 = 0;
if (arr[i][j]!=0) continue;
for (int k=0; k<9; k++)
if (arr[i][k]!=num) label_1++;
for (int m=0; m<9; m++)
if (arr[m][j]!=num) label_2++;
for (int p=i/3*3; p<i/3*3+3; p++)
for (int q=j/3*3; q<j/3*3+3; q++)
if (arr[p][q]!=num) label_3++;
}while (label_1<9 || label_2<9 || label_3<9);
arr[i][j] = num;
}
}
printf("\n\n\n");
for (int i=0; i<9; i++){
for (int j=0; j<9; j++){
printf("%d ", arr[i][j]);
if ((j+1)%3==0) printf(" ");
}
printf("\n\n");
if ((i+1)%3==0) printf("\n");
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/45952.html
標籤:C語言
上一篇:求大佬看下程式哪里出錯了
