JavaScript数独求解器
<html>
<head>
<style type="text/css">
.txt {
width: 50;
height: 50;
background-color: black;
color: white;
text-align: center;
font-family: Consolas;
font-size: 40;
}
.btn {
width: 200;
height: 60;
text-align: center;
font-family: 楷体;
font-size: 40;
color: white;
background-color: black;
}
</style>
</head>
<h1 align="center">请输入已知的数字</h1>
<script type="text/javascript">
init();
var a = new Array(81);
var over = false;
function run() {
if (cin() == false)
document.getElementById('re').innerHTML = '输入不合法';
else {
over = false;
document.getElementById('re').innerHTML = '正在运行';
go(0, 0);
if (over) {
cout();
document.getElementById('re').innerHTML = '运行结束';
} else
document.getElementById('re').innerHTML = '条件太少,没找到答案';
}
}
function cout() {
for (var i = 0; i < 81; i++) {
document.getElementById('grid' + i).value = a[i];
}
}
function cin() {
for (var i = 0; i < 81; i++) {
a[i] = document.getElementById('grid' + i).value;
if (a[i] == undefined || a[i] == '')
a[i] = 0;
}
return true;
}
function canBe(x, y, v) {
for (var i = 0; i < 9; i++) {
if (i != x && v == a[i * 9 + y])
return false;
else if (i != y && v == a[x * 9 + i])
return false;
}
var xx=Math.floor(x/3)*3;
var yy=Math.floor(y/3)*3;
for (var i = xx; i < xx + 3; i++) {
for (var j = yy; j < yy + 3; j++) {
if (a[i * 9 + j] == v && (i != x || y != j))
return false;
}
}
return true;
}
function next(x, y) {
var z = x * 9 + y + 1;
if (z == 81)
over = true;
else
go( Math.floor(z/9), z % 9);
}
function go(x, y) {
if (a[x * 9 + y] == 0) {
for (var i = 1; i <= 9; i++) {
if (canBe(x, y, i)) {
a[x * 9 + y] = i;
next(x, y);
if (over)
return;
}
}
a[x * 9 + y] = 0;
} else {
next(x, y);
}
}
function clr() {
for (var i = 0; i < 81; i++)
document.getElementById('grid' + i).value = '';
}
function init() {
document.write("<table align='center'>");
for (var i = 0; i < 9; i++) {
document.write("<tr>");
for (var j = 0; j < 9; j++) {
document
.write("<td><input type='text' maxlength=1 class='txt' id='grid"
+ (i * 9 + j) + "'></input></td>");
}
document.write("</tr>");
}
document.write("</table>");
}
</script>
<input type="button" value='清空' class='btn' onclick="clr()"></input>
<input type="button" value='运行' class='btn' onclick="run()"></input>
<h3 id='re'>weidiao</h3>
<h3 id='haha'></h3>
</html>
JavaScript数独求解器的更多相关文章
- 编程之美之数独求解器的C++实现方法
编程之美的第一章的第15节.讲的是构造数独.一開始拿到这个问题的确没有思路, 只是看了书中的介绍之后, 发现原来这个的求解思路和N皇后问题是一致的. 可是不知道为啥,反正一開始确实没有想到这个回溯法. ...
- 经典数独游戏+数独求解器—纯C语言实现
"心常乐数独小游戏"(下面简称"本软件")是一款windows平台下的数独游戏软件. 本软件是开源.免费软件. 本软件使用纯C语言编写,MinGW编译,NSIS ...
- VBA调用数独求解器
我开发了一个用于求解数独的dll文件,只需要双击一下注册表文件,就可以在VBA中调用这个功能了.具体步骤如下: 下载:https://share.weiyun.com/5dpcNqx 找到ExcelS ...
- C# 数独求解算法。
前言 数独是一种有趣的智力游戏,但是部分高难度数独在求解过程中经常出现大量单元格有多个候选数字可以填入,不得不尝试填写某个数字然后继续推导的方法.不幸的是这种方法经常出现填到一半才发现有单元格无数可填 ...
- C#简易一元二次求解器
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- 自己实现的一款在线Javascript正则表达式测试器——JRE-Parser
本文最初发布于我的个人博客:http://jerryzou.com/posts/jreparser/ 昨天在看<正则表达式30分钟入门教程>的时候,看到博主自己实现了一个C#写的正则测试器 ...
- Maxwell顺态求解器电磁力分析
文源:技术邻 问题描述:求解一段通有正弦交流电的直导线在某一稳态磁场中的受力情况,并简单验证仿真结果. 模型介绍: 如上几何模型中10mm边长立方体代表永磁体,材料属性为材料库中的NdFe35,修改磁 ...
- 线性二次型调节器LQR/LQC算法解析及求解器代码(matlab)
参考链接:http://120.52.51.14/stanford.edu/class/ee363/lectures/dlqr.pdf 本文参考讲义中的第20页PPT,根据Hamilton-Jacob ...
- TRAC-IK机器人运动学求解器
TRAC-IK和Orocos KDL类似,也是一种基于数值解的机器人运动学求解器,但是在算法层面上进行了很多改进(Specifically, KDL’s convergence algorithms ...
随机推荐
- 解析json格式数据
实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...
- 虚拟机centos6.5 --ssh免密码登录
说明:此处是以hadoop虚拟机3台机器为背景进行设置,即master.slave01.slave02 1.在master上,生成公钥.私钥 用hadoop用户登录系统,进入个人主目录,即/home/ ...
- [转] Finding the Best Programmer's Font
原文 Finding the Best Programmer's Font
- for循环的省略
for (初始化语句; 条件语句; 控制语句){ 被执行的代码块 }; 例如: for (var i=0;i<cars.length;i++) { document.write(cars[i] ...
- css3 border-radius
前缀对应浏览器 前缀 浏览器 -webkit chrome和safari -moz firefox -ms IE -o opera border-radius: <style type=&quo ...
- 阿里云377秒完成100TB数据排序:秒三星百度
阿里云377秒完成100TB数据排序:秒三星百度 今日,Sort Benchmark 在官方网站公布了 2015 年排序竞赛的最终成绩.其中,阿里云用不到 7 分钟(377 秒)就完成了 100TB ...
- 隐写技巧——利用JPEG文件格式隐藏payload
0x00 前言 继续对图片隐写技巧的学习,这次是对JPEG文件格式的学习和理解.同PNG文件的格式对比,JPEG文件相对简单,读取其中隐藏payload的方式大同小异,两者区别在于文件格式不同,可供利 ...
- JS原型与原型链终极详解
一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 function f ...
- Entityframework core 动态添加模型实体
重新DBContext中OnModelCreating protected override void OnModelCreating(ModelBuilder modelBuilder) { // ...
- phantomjs模拟登录
最近在做一些公司其他部门系统的后台模拟操作,但由于那边的系统最开始是外包给其他公司开发的,现在那边的开发也不知道有些post的参数是如何生成的.于是想考察下是不是可以把phantomjs这个工具给加进 ...