为什么这段代码能够判断二维数组中的数字是否重复?

问题描述 投票:0回答:1
//checking validity of sudoku solution
bool validityCheck (int sudoku [25][25], int n, int sqrt_n) {
     //checking rows validity
     for (int i=0; i<n; ++i) { // i means place in column
        bool numCounter [25] = { false };
        for (int j=0; j<n; j++){  //j means place in row
            if (numCounter[(sudoku[i][j])-1] == true){
                return false;
             }
            else {
                numCounter[(sudoku[i][j]) -1] = true;
            }
        }
     }
     //checking columns validity
     for (int j=0; j<n; ++j) {
        bool numCounter [25] = {false};
        for (int  i = 0; i<n; ++i){
            if (numCounter[sudoku[i][j]-1] == true){
                return false;
             }
            else {
                numCounter[sudoku[i][j]-1]=true;
            }
        }
    }
    //checking square validity
    for (int s = 0; s < sqrt_n; s++) { //s means square in column
        for (int r = 0; r < sqrt_n; r++) {//r means square in row
            bool numCounter [25] = {false};
            int j = sqrt_n * s;
            for ( ; j < sqrt_n; ++j) {
                int  i = sqrt_n * r;
                for ( ; i < sqrt_n; ++i){
                    if (numCounter[sudoku[i][j]-1] == true){
                        return false;
                     }
                    else {
                        numCounter[sudoku[i][j]-1]=true;
                    }
                }
            }
        }
    }

    return true;
}

大家好,这段代码使用 bool 来判断一个数字是否在二维数组的行、列或平方根中重复。 是不是一开始bool被设置为false,如果假设值4被重复,那么首先它变成true,然后再次检查并发现它是true,所以我们知道它已经被重复并返回false? 我想我明白了,只是确定一下。

c multidimensional-array 2d
1个回答
0
投票

基本上,它有一个包含从1到26的所有号码的清单,检查该号码是否已被使用,如果没有则写入它。

因此,numCounter 是一个包含 25 个布尔值的数组,因为每行只有 25 个数字(1 到 26)。 数组中的每个布尔值都指示索引处的数字是否已被使用。 所以线条

if (numCounter[(sudoku[i][j])-1] == true){
            return false;
         }
        else {
            numCounter[(sudoku[i][j]) -1] = true;
        }

首先检查该数字是否已被使用,如果有,则返回函数一个 false,表示数独不正确;如果不是,则通过将 bool 值设置为 true 来将其设置为已使用的。 在这种情况下,该行

sudoku[i][j]

返回数组数独中实际行位置 (j) 的实际列 (i) 中的数字。这应该给你一个 1 到 26 之间的数字。然后你输入 -1,因为数组从 0 而不是 1 开始。

© www.soinside.com 2019 - 2024. All rights reserved.