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入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
javascript void(0)的妙用
Oct 21 Javascript
jquery实现控制表格行高亮实例
Jun 05 Javascript
Google (Local) Search API的简单使用介绍
Nov 28 Javascript
js判断是否按下了Shift键的方法
Jan 27 Javascript
JS iFrame加载慢怎么解决
May 13 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
Feb 24 Javascript
javascript编程实现栈的方法详解【经典数据结构】
Apr 11 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
OpenLayers3实现测量功能
Sep 25 Javascript
Vant 中的Toast设置全局的延迟时间操作
Nov 04 Javascript
实现AJAX异步调用和局部刷新的基本步骤
Mar 17 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
PHPEXCEL 使用小记
2013/01/06 PHP
php中设置index.php文件为只读的方法
2013/02/06 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
四个PHP非常实用的功能
2015/09/29 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
Python pass 语句使用示例
2014/03/11 Python
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
解决Python requests 报错方法集锦
2017/03/19 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
Django中create和save方法的不同
2019/08/13 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
毕业生找工作推荐信
2013/11/21 职场文书
商务英语应届生自我鉴定
2013/12/08 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
新闻学专业大学生职业生涯规划范文
2014/03/02 职场文书
加入学生会演讲稿
2014/04/24 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
拆迁委托协议书
2014/09/15 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
九九重阳节标语
2014/10/07 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP