soulmachine / leetcode

LeetCode题解,151道题完整版。
BSD 3-Clause "New" or "Revised" License
11.29k stars 3.43k forks source link

Sudoku Solver 代码这里感觉有问题 (chapDFS, 900行) #4

Closed codescv closed 10 years ago

codescv commented 10 years ago
bool isValid(const vector<vector<char> > &board, int x, int y) {
    int i, j;
    for (i = 0; i < 9; i++) // 检查 y 列
        if (i != x && board[i][y] == board[x][y])
            return false;
    for (j = 0; j < 9; j++) // 检查 x 行
        if (j != y && board[x][j] == board[x][y])
            return false;
    for (i = 3 * (x / 3); i < 3 * (x / 3 + 1); i++)
        for (j = 3 * (y / 3); j < 3 * (y / 3 + 1); j++)
            if (i != x && j != y && board[i][j] == board[x][y])
            -------------------------------------------------
             这个地方, 我感觉应该是 if ((i != x || j != y) &&  board[i][j] == board[x][y]) ?
             应该只是排除board[x][y] 自身以后, 然后看有没有和他重复的吧.

                return false;
    return true;
}
soulmachine commented 10 years ago

这里的意图是,判断9个方格子,除了自身,即8个格子,有没有和(x,y)重复的,所以代码没问题。

codescv commented 10 years ago

可是你这里判断的并不是8个格子啊 你再想想: (i, j) != (x, y) 应该是 ! (i = x && j = y) , 也就是 (i != x || j != y), 而不是 (i != x && j != y)

soulmachine commented 10 years ago

我仔细思考了一下,你是对的:) 你把这行改了,发一个pull request 过来吧:)