لغز
ساحة السحر من المستوى الثالث. حاول ملء 9 أعداد صحيحة مختلفة ، 1 ~ 9 ، إلى جدول 3 × 3 ، بحيث يكون مجموع الأرقام في كل صف ، كل عمود ، وكل قطري هو نفسه.
الاستراتيجية
بحث استنفدت. قائمة جميع مخططات ملء عدد صحيح ومرشح.
حل جافا سكريبت
نسخة الكود كما يلي:
/**
* تم إنشاؤه بواسطة Chao في 12/28/14.
*/
وظيفة getPermittry (arr) {
if (arr.length == 1) {
العودة [arr] ؛
}
var permitchated = [] ؛
لـ (var i = 0 ؛ i <arr.length ؛ i ++) {
var firstele = arr [i] ؛
var arrclone = arr.slice (0) ؛
arrclone.splice (i ، 1) ؛
var childpermittry = getPermutation (arrclone) ؛
لـ (var j = 0 ؛ j <childpermatter.length ؛ j ++) {
childpermutation [j] .Unshift (firstele) ؛
}
التقليب = التقليب.
}
التقليب ؛
}
وظيفة ValityTeCandidate (مرشح) {
var sum = Covilidate [0] + Coaridate [1] + Complidate [2] ؛
لـ (var i = 0 ؛ i <3 ؛ i ++) {
if (! (sumofline (المرشح ، i) == sum && sumofColumn (المرشح ، i) == sum)) {
العودة كاذبة
}
}
if (sumofdiagonal (مرشح ، صحيح) == sum && sumofdiagonal (مرشح ، خطأ) == sum) {
العودة صحيح.
}
العودة كاذبة
}
وظيفة sumofline (المرشح ، الخط) {
مرشح إرجاع [السطر*3] + مرشح [الخط*3 + 1] + مرشح [السطر*3 + 2] ؛
}
وظيفة sumofcolumn (مرشح ، العقيد) {
مرشح إرجاع [Col] + مرشح [Col + 3] + مرشح [Col + 6] ؛
}
وظيفة sumofdiagonal (مرشح ، iSforwardslash) {
العودة Isforwardslash؟ المرشح [2]+مرشح [4]+مرشح [6]: مرشح [0]+مرشح [4]+مرشح [8] ؛
}
var praytratement = getPermutation ([1،2،3،4،5،6،7،8،9]) ؛
مرشح فار.
لـ (var i = 0 ؛ i <permithing.length ؛ i ++) {
المرشح = التقليب [i] ؛
إذا (ValidateCandidate (مرشح)) {
استراحة؛
} آخر {
المرشح = فارغ ؛
}
}
إذا (المرشح) {
console.log (مرشح) ؛
} آخر {
console.log ("لم يتم العثور على نتيجة صالحة") ؛
}
نتيجة
نسخة الكود كما يلي:
[2 ، 7 ، 6 ، 9 ، 5 ، 1 ، 4 ، 3 ، 8]
تصوره على أنه مربع سحري هو:
نسخة الكود كما يلي:
2 7 6
9 5 1
4 3 8
تحليل
باستخدام هذه الاستراتيجية ، يمكنك من الناحية النظرية الحصول على حلول أي ميدان سحري N-order ، ولكن في الواقع ، يمكنك فقط الحصول على الحل المحدد للمربع السحري من الدرجة الثالثة ، لأنه عندما تصبح التشغيل المستهلكة للوقت للحصول على جميع مخططات التعبئة ضخمة للغاية.