分享能够生成指定难度的数独源码

分享一份我之前完成的数独算法,使用JS语言实现,希望和感兴趣的同学一起切磋交流。

sudoRules.rar (4.8 KB)

调用接口是generateSudo(hard); //hard代表难度值:1~5,数字越大,难度越大

2赞

收藏!

在代码的最后部分有三类测试代码:
第一部分测试代码是可以生成指定难度的数独:
var args = process.argv.splice(2);
var hard = 0;
for (var i = 0; i < args.length; i++) {
if (args[i] == ‘-h’) {
hard = args[i + 1];
}
}
var sudo = exports.generateSudo(hard);
printSudo(sudo);

命令是:
node sudoRules.js -h 2 // -h 表示难度, 2代表难度值,难度范围是1~5

第二部分是生成一个有效的数独
console.time(“generateOneValidSudo”);
var sudo = generateOneValidSudo();
console.timeEnd(“generateOneValidSudo”);
printSudo(sudo);

命令是:
node sudoRules.js
返回一个有效数独及生成这个数独所消耗的时间,平均消耗时间在20ms左右

第三部分是生成所有有效数独(所有数独是指对角线三个九宫格数字分布固定后生成的全部数独)
console.time(“generate all valid sudoes”);
var allsudoes = exports.generateAllValidSudo();
console.timeEnd(“generate all valid sudoes”);
// (var i = 0; i < allsudoes.length; i++) {
// printSudo(allsudoes[i]);
//}
命令是:
node sudoRules.js
会返回生成所有有效数独所消耗的时间,如果要打印所有已生成的数独,可把最下面的三行打开即可。

mark 关注