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 ...
随机推荐
- nginx日志切割脚本
#!/bin/bash ip=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d ...
- x01.Game.Main: 从零开始
一切从零开始,一切皆有可能. 浅墨,90后,<逐梦之旅>深入浅出,堪比大师. 1.安装 DXSDK_June10.exe 或更新版本. 2.运行 vs2012,新建 VC Win32 空项 ...
- TCP校验和的原理和实现
http://blog.csdn.net/zhangskd/article/details/11770647 分类: Linux TCP/IP Linux Kernel 2013-09-24 ...
- JAVA构造函数(方法)与方法是啥意思
成员方法必须有返回类型即使是没有返回,也要写上void 构造函数(方法)没有返回类型,而且和类名一样!一个类里面,一看就知道了譬如:public class Test{public Test(){} ...
- Java:JSTL遍历数组,List,Set,Map
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Channel SDK (渠道SDK) for Unity
渠道 英文channel,解释:商品的销售路线,也就是我们开发商(CP)都把游戏开发好了,交付给渠道帮我们运营,帮我们推广,帮我们赚钱. Android和IOS渠道 拿安卓和IOS两大平台来说,它们都 ...
- QuickFIX/N入门:(三)如何配置QuickFIX/N
Acceptor或者Initiator能够为您维护尽可能多的FIX会话,因而FIX会话标识的唯一性非常重要.在QuickFIX/N中,一个FIX会话的唯一标识是由:BeginString(FIX版本号 ...
- Javascript Window的属性
Window的属性 属性 描述 closed 获取引用窗口是否已关闭. defaultStatus 设置或获取要在窗口底部的状态栏上显示的缺省信息. dialogArguments 设置或获取传递给模 ...
- java 26 - 6 网络编程之 TCP协议 传输思路 以及 代码
TCP传输 Socket和ServerSocket 建立客户端和服务器 建立连接后,通过Socket中的IO流进行数据的传输 关闭socket 同样,客户端与服务器是两个独立的应用程序 TCP协议发送 ...
- win10的安装与下载
1.下载介质创建工具 https://www.microsoft.com/zh-cn/software-download/windows10 2. 下载iso https://www.microsof ...