2014-01-08 28 views
-3

我在網上找到了一個函數來解決我在用C語言編寫的Sudoku上的問題。我已經完成了幾乎所有的事情,但我被困在這裏,我無法檢查3x3框if任何值是重複的:數獨3x3框檢查是否在C中複製

/** 
* Check if a value contains in its 3x3 box for a cell. 
* @param row current row index. 
* @param col current column index. 
* @return true if this cell is incorrect or duplicated in its 3x3 box. 
*/ 
private boolean containedIn3x3Box(int row, int col, int value) { 
    // Find the top left of its 3x3 box to start validating from 
    int startRow = row/3 * 3; 
    int startCol = col/3 * 3; 

    // Check within its 3x3 box except its cell 
    for (int i = startRow; i < startRow + 3; i++) 
     for (int j = startCol; j < startCol + 3; j++) { 
      if (!(i == row && j == col)) { 
       if (cells[i][j] == value){ 
        return true; 
       } 
      } 
     } 

    return false; 
} 

在這裏是函數,我把它放在我的節目在這裏:

int valid(int k, int ii, int jj) 
{ 
    int i,start,final,j; 
    start=ii/3*3; 
    final=jj/3*3; 
    for(i = 1; i <= 9; ++i) { 
     if (i != ii && v[i][jj] == k) 
      return 0; 
     if (i != jj && v[ii][i] == k) 
      return 0; 
    } 
    for(i=start;i<=start+3;i++) 
     for(j=final;j<=final+3;j++) 
     { 
      if(!(i==ii && j==jj)) 
      { 
       if(v[i][j]==k) 
       return 0; 
      } 
     } 
    return 1; 
} 

我看了網站上,我把這個功能並試圖理解程序。該程序將值與值部分進行比較。我的循環運行不正常。

+0

爲什麼您使用的有效功能兩個循環?我想'如果(i!= jj && v [ii] [i] == k)'在這裏你是比較值而不是行。 – SaurabhJinturkar

+0

請明確提出您的問題。看起來您需要對某些代碼進行解釋,但是您不清楚哪些代碼會讓您感到困惑。 – anatolyg

+0

第一個循環從它的行/柱檢查下一個爲框3x3檢查它是從第一個功能翻譯。 –

回答

0

你的問題是循環的開始和結束值。

該示例使用基於0的計數。三個三胞胎有指數(0,1,2)(3,4,5)(6,7,8)。 您想要使用基於1的循環。

你已經錯過了改變對雙環下限:

int valid(int k, int ii, int jj) 
{ 
    int i,start,final,j; 
    start=ii/3*3; 
    final=jj/3*3; 
    for(i = 1; i <= 9; ++i) { 
     if (i != ii && v[i][jj] == k) 
      return 0; 
     if (i != jj && v[ii][i] == k) 
      return 0; 
    } 
    for(i=start+1;i<=start+3;i++)    // Changed lower limit 
     for(j=final+1;j<=final+3;j++)   // Changed lower limit 
     { 
      if(!(i==ii && j==jj)) 
      { 
       if(v[i][j]==k) 
       return 0; 
      } 
     } 
    return 1; 
} 
+0

它不是從0開始從1到9我不從0開始編輯某人... –

+0

在'containedIn3x3Box'中它從0開始。我將修改我的答案,使其以1開頭。 –

+0

不幫助我非常...它應該是我=開始,我<=開始+ 2不+3 –

相關問題