|
> No.3156[元記事へ]
GAIさんへのお返事です。
> また5×5の魔方陣で対角線のみ和が異なるものを作ろうとやってみたんですが、
> 各行と各列での和が一致してしまうと、自動的に対角線の和も一致してしまい、そこだけが
> 和が異なるものがみつれらませんでした。
> そこでこれも対角線の和だけが異なるものが存在しているのか?
同様な手法で検索しようとしました。
5x5の場合、25!通りが対象なので、実時間内では困難のようです。
したがって、4隅を既知として考えてみました。
5x5を2,3時間程度で求めることは今後の課題です!
PUBLIC NUMERIC C !解の個数
LET C=0
DIM F(25) !数字
MAT F=ZER
DIM A(25) !並び
DATA 1,18,25,12 !4隅
FOR i=1 TO 4
READ W
LET F(W)=1
LET A(i)=W
NEXT i
LET S=25*(25+1)/2 / 5 !魔法数
PRINT S
CALL try(5,F,S,A)
!!CALL try(1,F,S,A)
END
EXTERNAL SUB try(P,F(),S,A()) !バックトラック法で検索する
FOR i=1 TO 25 !未使用の数字が候補である
IF F(i)=0 THEN
LET F(i)=1 !使用中
LET A(P)=i !p番目の数字
LET OK=1
SELECT CASE P !並んだ数字の個数に応じて
CASE 2
IF A(1)>A(2) THEN LET OK=0 !対称性
CASE 3
IF A(2)>A(3) THEN LET OK=0 !対称性
CASE 4
IF A(1)>A(4) THEN LET OK=0 !対称性
CASE 7
IF A(2)+A(5)+A(6)+A(7)+A(3)<>S THEN LET OK=0
CASE 9
IF A(1)+A(8)+A(6)+A(9)+A(4)=S THEN LET OK=0
!!IF A(1)+A(8)+A(6)+A(9)+A(4)<>S THEN LET OK=0 !5x5魔方陣
CASE 12
IF A(1)+A(10)+A(11)+A(12)+A(2)<>S THEN LET OK=0
CASE 15
IF A(13)+A(8)+A(14)+A(5)+A(15)<>S THEN LET OK=0
CASE 18
IF A(16)+A(7)+A(17)+A(9)+A(18)<>S THEN LET OK=0
CASE 20
IF A(11)+A(14)+A(6)+A(17)+A(20)<>S THEN LET OK=0
CASE 21
IF A(3)+A(19)+A(20)+A(21)+A(4)<>S THEN LET OK=0
CASE 22
IF A(1)+A(13)+A(22)+A(16)+A(3)<>S THEN LET OK=0
CASE 23
IF A(10)+A(8)+A(23)+A(7)+A(19)<>S THEN LET OK=0
CASE 24
IF A(12)+A(5)+A(24)+A(9)+A(21)<>S THEN LET OK=0
CASE 25
IF A(2)+A(15)+A(25)+A(18)+A(4)<>S THEN LET OK=0
IF A(22)+A(23)+A(6)+A(24)+A(25)<>S THEN LET OK=0
CASE ELSE
END SELECT
IF OK=1 THEN !条件を満たす
IF P=25 THEN !すべて揃ったなら
LET C=C+1
PRINT "No.";C
PRINT USING "## ## ## ## ##": A(1),A(10),A(11),A(12), A(2)
PRINT USING "## ## ## ## ##": A(13), A(8),A(14), A(5),A(15)
PRINT USING "## ## ## ## ##": A(22),A(23), A(6),A(24),A(25)
PRINT USING "## ## ## ## ##": A(16), A(7),A(17), A(9),A(18)
PRINT USING "## ## ## ## ##": A(3),A(19),A(20),A(21), A(4)
ELSE
CALL try(P+1,F,S,A) !次へ
END IF
END IF
LET F(i)=0 !元に戻す
END IF
NEXT i
END SUB
実行結果
65
No. 1
1 11 14 21 18
15 4 24 2 20
8 23 3 22 9
16 17 19 7 6
25 10 5 13 12
No. 2
1 11 15 20 18
21 4 22 2 16
10 24 3 23 5
8 17 19 7 14
25 9 6 13 12
No. 3
1 14 10 22 18
19 4 24 2 16
5 21 3 23 13
15 17 20 7 6
25 9 8 11 12
No. 4
1 15 9 22 18
16 4 24 2 19
10 21 3 20 11
13 17 23 7 5
25 8 6 14 12
No. 5
1 15 11 20 18
16 4 22 2 21
14 19 3 23 6
9 17 24 7 8
25 10 5 13 12
No. 6
1 15 11 20 18
16 4 22 2 21
9 24 3 23 6
14 17 19 7 8
25 5 10 13 12
:
:
|
|