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 isArray 数组类型检测函数
Oct 08 Javascript
分享14个很酷的jQuery导航菜单插件
Apr 25 Javascript
浅析Prototype的模板类 Template
Dec 07 Javascript
JavaScript判断表单为空及获取焦点的方法
Feb 12 Javascript
ionic实现滑动的三种方式
Aug 27 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
Aug 02 Javascript
angular2系列之路由转场动画的示例代码
Nov 09 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
Nov 14 Javascript
vue中keep-alive组件的入门使用教程
Jun 06 Javascript
jquery图片预览插件实现方法详解
Jul 18 jQuery
小程序外卖订单界面的示例代码
Dec 30 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
Mar 03 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的5个入手程序
2006/11/23 PHP
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
深入PHP许愿墙模块功能分析
2013/06/25 PHP
php中异常处理方法小结
2015/01/09 PHP
php查看网页源代码的方法
2015/03/13 PHP
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
python实现目录树生成示例
2014/03/28 Python
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
Python编码爬坑指南(必看)
2016/06/10 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
英国儿童图书网站:Scholastic
2017/03/26 全球购物
英国探险旅游专家:Explore
2018/12/20 全球购物
接口可以包含哪些成员
2012/09/30 面试题
决心书标准格式
2014/03/11 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
教师学习心得体会范文
2016/01/21 职场文书
Spring 使用注解开发
2022/05/20 Java/Android