使用JavaScript实现数独网格预填充的递归逻辑问题求助
使用JavaScript实现数独网格预填充的递归逻辑问题求助
大家好,我正在用纯JavaScript写一个小型数独游戏,现在卡在代码逻辑上了。我看了一些实现例子,但没办法把它们的思路适配到自己的代码里,甚至怀疑是不是自己的核心思路本身就错了。
我的核心问题出在fillGrid函数的递归调用上——我搞不清楚什么时候该再次调用递归,以及什么时候该返回布尔值。试了好几种不同的写法,要么陷入死循环,要么最后得到的是一个只填充了一部分的网格。
先贴一下我目前的代码:
function fillGrid(grid) { // Run through grid to get next 0 to fill let filled = grid.every((row, rowIndex) => { // Row contains 0? let colIndex = row.indexOf(0); if (colIndex !== -1) { let randNumb = randomNumberBetween(1, 9); // Set random number where first 0 is found grid[rowIndex][colIndex] = randNumb; // Check validity let gridValid = gridIsValid(grid); // When valid continue with the new set number if (gridValid) { return fillGrid(grid); } else { // When not valid, reset number and have another try grid[rowIndex][colIndex] = 0; return fillGrid(grid); } } }); return filled; }
这个函数的预期功能是:接收一个所有位置都是0的预填充网格,最终把整个网格填满符合数独规则的数字。
我看到的其他实现例子,大多是遍历1到9的数字,并且在每次递归调用时追踪当前的行和列位置。但我更倾向于直接随机生成数字来填充,再继续处理下一个空格的思路,不知道这种思路能不能行得通?
备注:内容来源于stack exchange,提问作者elCinturon
相关产品推荐
相关产品推荐

