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 相关文章推荐
select组合框option的捕捉实例代码
Sep 30 Javascript
JavaScript 异步调用框架 (Part 6 - 实例 &amp; 模式)
Aug 04 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
Oct 27 Javascript
jQuery 处理表单元素的代码
Feb 15 Javascript
jquery事件与函数的使用介绍
Sep 29 Javascript
js弹出层永远居中实现思路及代码
Nov 29 Javascript
用html+css+js实现的一个简单的图片切换特效
May 28 Javascript
avascript中的自执行匿名函数应用示例
Sep 15 Javascript
AngularJS实现在ng-Options加上index的解决方法
Nov 03 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
Feb 20 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
May 29 Javascript
Canvas跟随鼠标炫彩小球的实现
Apr 11 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检查是否是ajax请求的方法
2015/04/16 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
解决Python传递中文参数的问题
2015/08/04 Python
Python提取网页中超链接的方法
2016/09/18 Python
简单谈谈python基本数据类型
2018/09/26 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
艺术用品:Arteza
2018/11/25 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
vue+django实现下载文件的示例
2021/03/24 Vue.js
理工科学生的自我评价
2013/12/15 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
求职意向书
2014/04/01 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
毕业生实习证明
2014/09/19 职场文书
个人查摆剖析材料
2014/10/16 职场文书
工作作风建设心得体会
2014/10/22 职场文书
小石潭记导游词
2015/02/03 职场文书
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript