国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript實現(xiàn)三階幻方算法謎題解答

2024-05-06 16:13:09
字體:
供稿:網(wǎng)友
這篇文章主要介紹了JavaScript實現(xiàn)三階幻方算法謎題解答,三階幻方是指試將1~9這9個不同整數(shù)填入一個3×3的表格,使得每行、每列以及每條對角線上的數(shù)字之和相同,需要的朋友可以參考下
 
 

謎題

 

三階幻方。試將1~9這9個不同整數(shù)填入一個3×3的表格,使得每行、每列以及每條對角線上的數(shù)字之和相同。

 

策略

 

窮舉搜索。列出所有的整數(shù)填充方案,然后進(jìn)行過濾。

 

JavaScript解

 

 

復(fù)制代碼代碼如下:

/**
 * 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');
}

 

 

結(jié)果

 

復(fù)制代碼代碼如下:

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

 

 

描繪成幻方即為:

 

復(fù)制代碼代碼如下:

2    7    6
9    5    1
4    3    8

 

 

分析

 

使用此策略理論上可以獲取任意n階幻方的解,但實際上只能獲得3階幻方這一特定解,因為當(dāng)n>3時,獲取所有填充方案這一窮舉操作的耗時將變得極其巨大。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 松滋市| 台南市| 涡阳县| 麟游县| 射洪县| 陇西县| 鄯善县| 尼勒克县| 湟中县| 黄冈市| 龙山县| 金坛市| 海晏县| 连城县| 扎鲁特旗| 平顶山市| 临夏市| 宜良县| 施秉县| 兴山县| 通化县| 吉林省| 体育| 雅江县| 炎陵县| 砀山县| 石柱| 浦江县| 旬阳县| 醴陵市| 乐都县| 饶阳县| 当涂县| 铜梁县| 玛曲县| 高要市| 德兴市| 徐水县| 沐川县| 石狮市| 丹东市|