JavaScript实现三阶幻方算法谜题解答


Posted in Javascript onDecember 29, 2014

谜题

三阶幻方。试将1~9这9个不同整数填入一个3×3的表格,使得每行、每列以及每条对角线上的数字之和相同。

策略

穷举搜索。列出所有的整数填充方案,然后进行过滤。

JavaScript解

/**

 * Created by cshao on 12/28/14.

 */
function getPermutation(arr) {

  if (arr.length == 1) {

    return [arr];

  }
  var permutation = [];

  for (var i=0; i<arr.length; i++) {

    var firstEle = arr[i];

    var arrClone = arr.slice(0);

    arrClone.splice(i, 1);

    var childPermutation = getPermutation(arrClone);

    for (var j=0; j<childPermutation.length; j++) {

      childPermutation[j].unshift(firstEle);

    }

    permutation = permutation.concat(childPermutation);

  }

  return permutation;

}
function validateCandidate(candidate) {

  var sum = candidate[0] + candidate[1] + candidate[2];

  for (var i=0; i<3; i++) {

    if (!(sumOfLine(candidate,i)==sum && sumOfColumn(candidate,i)==sum)) {

      return false;

    }

  }

  if (sumOfDiagonal(candidate,true)==sum && sumOfDiagonal(candidate,false)==sum) {

    return true;

  }

  return false;

}

function sumOfLine(candidate, line) {

  return candidate[line*3] + candidate[line*3+1] + candidate[line*3+2];

}

function sumOfColumn(candidate, col) {

  return candidate[col] + candidate[col+3] + candidate[col+6];

}

function sumOfDiagonal(candidate, isForwardSlash) {

  return isForwardSlash ? candidate[2]+candidate[4]+candidate[6] : candidate[0]+candidate[4]+candidate[8];

}
var permutation = getPermutation([1,2,3,4,5,6,7,8,9]);

var candidate;

for (var i=0; i<permutation.length; i++) {

  candidate = permutation[i];

  if (validateCandidate(candidate)) {

    break;

  } else {

    candidate = null;

  }

}

if (candidate) {

  console.log(candidate);

} else {

  console.log('No valid result found');

}

结果

[ 2, 7, 6, 9, 5, 1, 4, 3, 8 ]

描绘成幻方即为:

2    7    6

9    5    1

4    3    8

分析

使用此策略理论上可以获取任意n阶幻方的解,但实际上只能获得3阶幻方这一特定解,因为当n>3时,获取所有填充方案这一穷举操作的耗时将变得极其巨大。

Javascript 相关文章推荐
Javascript实现动态菜单添加的实例代码
Jul 05 Javascript
JavaScript实现的日期控件具体代码
Nov 18 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
Aug 21 Javascript
轻松实现javascript数据双向绑定
Nov 11 Javascript
AngularJs Javascript MVC 框架
Jun 20 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
Sep 17 Javascript
微信开发 使用picker封装省市区三级联动模板
Oct 28 Javascript
Bootstrap DateTime Picker日历控件简单应用
Mar 25 Javascript
vue实现app页面切换动画效果实例
May 23 Javascript
angular 实现下拉列表组件的示例代码
Mar 09 Javascript
微信小程序云开发修改云数据库中的数据方法
May 18 Javascript
解决layui表格的表头不滚动的问题
Sep 04 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 #Javascript
jQuery中clearQueue()方法用法实例
Dec 29 #Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
Dec 29 #Javascript
浅谈JavaScript Array对象
Dec 29 #Javascript
JavaScript实现N皇后问题算法谜题解答
Dec 29 #Javascript
jQuery中dequeue()方法用法实例
Dec 29 #Javascript
jQuery中queue()方法用法实例
Dec 29 #Javascript
You might like
坏狼的PHP学习教程之第2天
2008/06/15 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
Python写的服务监控程序实例
2015/01/31 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
详解django三种文件下载方式
2018/04/06 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
秋天的怀念教学反思
2014/04/28 职场文书
电钳工人个人求职信
2014/05/10 职场文书
不错的求职信范文
2014/07/20 职场文书
上课说话检讨书500字
2014/11/01 职场文书
计算机专业自荐信
2015/03/05 职场文书
入党后的感想
2015/08/10 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python
Java实现给Word文件添加文字水印
2022/02/15 Java/Android