Closed codescv closed 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; }
这里的意图是,判断9个方格子,除了自身,即8个格子,有没有和(x,y)重复的,所以代码没问题。
可是你这里判断的并不是8个格子啊 你再想想: (i, j) != (x, y) 应该是 ! (i = x && j = y) , 也就是 (i != x || j != y), 而不是 (i != x && j != y)
我仔细思考了一下,你是对的:) 你把这行改了,发一个pull request 过来吧:)