<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数独求解器的更多相关文章

  1. 编程之美之数独求解器的C++实现方法

    编程之美的第一章的第15节.讲的是构造数独.一開始拿到这个问题的确没有思路, 只是看了书中的介绍之后, 发现原来这个的求解思路和N皇后问题是一致的. 可是不知道为啥,反正一開始确实没有想到这个回溯法. ...

  2. 经典数独游戏+数独求解器—纯C语言实现

    "心常乐数独小游戏"(下面简称"本软件")是一款windows平台下的数独游戏软件. 本软件是开源.免费软件. 本软件使用纯C语言编写,MinGW编译,NSIS ...

  3. VBA调用数独求解器

    我开发了一个用于求解数独的dll文件,只需要双击一下注册表文件,就可以在VBA中调用这个功能了.具体步骤如下: 下载:https://share.weiyun.com/5dpcNqx 找到ExcelS ...

  4. C# 数独求解算法。

    前言 数独是一种有趣的智力游戏,但是部分高难度数独在求解过程中经常出现大量单元格有多个候选数字可以填入,不得不尝试填写某个数字然后继续推导的方法.不幸的是这种方法经常出现填到一半才发现有单元格无数可填 ...

  5. C#简易一元二次求解器

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  6. 自己实现的一款在线Javascript正则表达式测试器——JRE-Parser

    本文最初发布于我的个人博客:http://jerryzou.com/posts/jreparser/ 昨天在看<正则表达式30分钟入门教程>的时候,看到博主自己实现了一个C#写的正则测试器 ...

  7. Maxwell顺态求解器电磁力分析

    文源:技术邻 问题描述:求解一段通有正弦交流电的直导线在某一稳态磁场中的受力情况,并简单验证仿真结果. 模型介绍: 如上几何模型中10mm边长立方体代表永磁体,材料属性为材料库中的NdFe35,修改磁 ...

  8. 线性二次型调节器LQR/LQC算法解析及求解器代码(matlab)

    参考链接:http://120.52.51.14/stanford.edu/class/ee363/lectures/dlqr.pdf 本文参考讲义中的第20页PPT,根据Hamilton-Jacob ...

  9. TRAC-IK机器人运动学求解器

    TRAC-IK和Orocos KDL类似,也是一种基于数值解的机器人运动学求解器,但是在算法层面上进行了很多改进(Specifically, KDL’s convergence algorithms ...

随机推荐

  1. Linux系统监控命令之iotop

    iotop命令 iotop命令是一个用来监视磁盘I/O使用状况的top类工具.iotop具有与top相似的UI,其中包括PID.用户.I/O.进程等相关信息.Linux下的IO统计工具如iostat, ...

  2. CentOS系统启动流程你懂否

    一.Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理.内存管理.网络协议栈.文件系统.驱动程序. IPC(Inter-Process Communicati ...

  3. day 2远程连接Linux系统管理

        IP端口-协议等基本概念 互联网上的计算机,都会有一个唯一的32位的地址,IP地址. 我们访问服务器.就必须通过这个IP地址. 局域网也有预留的IP地址 192/10/172开头.局域网的 I ...

  4. mysqli,Fatal error

    <?php //mysql数据库类-mysqli版 //2014/6/13 class mysqlidb{ public $dbhost; public $dbuser; public $dbp ...

  5. VMworld 2015 感受:VMware “Ready For Any”

    今年有机会参加在旧金山举行的 VMworld 2015.今天是正式开始的第一天.争取每天写一篇文章分享所见所听所感.第一天的主要活动,包括上午的 General Session,由 VMware 的几 ...

  6. PaintView 绘图控件解析

    博客地址:博客园,版权所有,转载须联系作者. GitHub地址:JustWeTools 最近做了个绘图的控件,实现了一些有趣的功能. 先上效果图: PaintView画图工具: 1.可直接使用设定按钮 ...

  7. 阻塞通信之Socket编程

    Socket通信,主要是基于TCP协议的通信.本文从Socket通信(代码实现).多线程并发.以及TCP协议相关原理方面 介绍 阻塞Socket通信一些知识. 本文从服务器端的视角,以“Echo Se ...

  8. AC日记——输出亲朋字符串 openjudge 1.7 05

    05:输出亲朋字符串 总时间限制:  1000ms 内存限制:  65536kB 描述 编写程序,求给定字符串s的亲朋字符串s1. 亲朋字符串s1定义如下:给定字符串s的第一个字符的ASCII值加第二 ...

  9. jmeter 监控服务器的内存,cpu等内容

    1.需要下载一个jar包,放入到lib /ext文件中  JMeterPlugins-Standard.jar 2.在服务器上安装 perfmon server agent 这里监控内存我们使用的是: ...

  10. luogu1097统计数字[noip2007提高组Day1T1]

    题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出 ...