アプリ版:「スタンプのみでお礼する」機能のリリースについて

 このカテゴリーでいいのでしょうか。
 魔法陣の作り方は、教えて!gooでも解説があります。一般的な解法があるようですが、そういった解法を使わないで、魔法陣をつくるアルゴリズムは、どのようにしたらいいでしょうか。
 全ての場合をしらみつぶしに調べていくという方法では、nxnの魔法陣では、(nxn)!通りに比例する程度のステップを繰り返すことが必要になりそうで、nが少し大きくなると、実用の範囲内の時間でみつけるのは難しそうです。
 一般的な解法を用いないで魔法陣を解く、実用的なアルゴリズムを教えてください。
 

A 回答 (2件)

えーと、5×5のような奇数の場合にだけ使える方法です。


文字だけで説明するのはちょっと難しいですが、5×5であるとして
はじめに5×5の枠(図の■)をかきます。その外に下の図のように枠を足します。(図のB。なお□は図をそろえる為のものです)

□□□□B
□□□BBB
□□■■■■■
□B■■■■■B
BB■■■■■BB
□B■■■■■B
□□■■■■■
□□□BBB
□□□□B

そこへ一番上の頂点から斜めに数字を1から書くのですが、
□□□□1
□□□2□6
□□3■7■11
□4■8■12■16
5□9■13■17□21
□10■14A18■22
□□15■19■23
□□□20□24
□□□□25
もとの5×5の枠からはみ出ている数字を反対側の■に書き込みます。
つまり、上の図で1はAに入れるというようにします。そうすると
  3,20,7,24,11
  16,8,25,12,4
  9,21,13,5,17
  22,14,1,18,10
  15,2,19,6,23
という魔法陣が完成して、縦・横・斜めどこも和は65となります。
文字で書くと難しいかも知れませんが、紙に書くとすぐ判ります。

こんな方法でよろしいかと思うのですが。
    • good
    • 0

単純に計算すると、4×4 の時ですら、(4^2)! = 20,922,789,888,000 ですから、この時点で実用的でないですよね。

最初の一行のうちの3つの数字の和が 18 未満のものと 34 以上になるものを省き、1つ足して、最初の一行の和が 34 にならないものを省き・・・と繰り返していけば、ずいぶん減って実用の範囲内に収まるかもしれません。
それでも 5×5 は無理っぽいです。

何か方法があるとすれば、囲碁のAIなども人間を遙かに超えているだろうから、無いと考えるのが無難なのじゃないかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!