2014-05-10 156 views
1

目前我無法讓我的代碼工作,在檢查數獨板後,它將一個新值分配給一個非插槽,然後查看它是否仍然有效。二維陣列澄清

目前,即使我輸入正確的輸入,這段代碼仍然告訴我,我的塊是無效的。

tempsudoku板基本上是一個數獨板,有一個0s的隨機插槽代表空白。有人可以看到我的代碼做錯了嗎?

int truefalse=1; 
printf("Enter a row (1-9), column (1-9) and number (1-9), separated by spaces: "); 
scanf("%d %d %d", &row, &column, &number); 

tempsudoku[row-1][column-1]=number; 

for(i=0;i<=2;i++) 
{ 
    for(j=0;j<=2;j++) 
    { 
     int check[9]={0}; 
     for(x=0;x<=(j*3)+2;x++) 
     { 
      for(y=0;y<=(i*3)+2;y++) 
      { 
       for(k=0;k<=8;k++) 
       { 
        if(tempsudoku[x][y]==k+1) 
        { 
         check[k]++; 
        } 
       } 
      } 
     } 

     for(k=0;k<=8;k++) 
     { 
      if(check[k]>=2) 
      { 
       printf("Error: repeats in board\n"); 
       truefalse=0;//basically means its false 
      } 
     } 
    } 
} 
+0

爲什麼你不實際使用TRUE/FALSE,而不是'truefalse = 0'? –

回答

1
for(x=0;x<=(j*3)+2;x++){ 
    for(y=0;y<=(i*3)+2;y++){ 

大概應該是

for(x=3*j;x<=(j*3)+2;x++){ 
    for(y=i*3;y<=(i*3)+2;y++){ 

循環遍歷一個塊的九個單元。


請注意,您可以簡化

for(k=0;k<=8;k++){ 
    if(tempsudoku[x][y]==k+1){ 
     check[k]++; 
    } 
} 

k = tempsudoku[x][y]; 
if (k >= 1) 
    check[k-1]++;