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的事件描述
Sep 08 Javascript
jQuery代码优化 遍历篇
Nov 01 Javascript
今天是星期几的4种JS代码写法
Sep 17 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
Mar 12 Javascript
jQuery实现的五子棋游戏实例
Jun 13 Javascript
JS打字效果的动态菜单代码分享
Aug 21 Javascript
JS实现的在线调色板实例(附demo源码下载)
Mar 01 Javascript
JS匹配日期和时间的正则表达式示例
May 12 Javascript
Angular.js中上传指令ng-upload的基本使用教程
Jul 30 Javascript
redux-saga 初识和使用
Mar 10 Javascript
区分vue-router的hash和history模式
Oct 03 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
Oct 28 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中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
2015/01/19 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
深入解读Python解析XML的几种方式
2016/02/16 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
PyTorch预训练的实现
2019/09/18 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
python爬虫请求头的使用
2020/12/01 Python
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
经济系大学生求职信
2013/10/01 职场文书
后勤人员岗位职责
2013/12/17 职场文书
给老师的检讨书
2014/02/11 职场文书
科级干部考察材料
2014/02/15 职场文书
安全教育感言
2014/03/04 职场文书
通用自荐信范文
2014/03/14 职场文书
数据保密承诺书
2014/06/03 职场文书
兴趣班停课通知
2015/04/24 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android
vue3不同环境下实现配置代理
2022/05/25 Vue.js
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL