第10講 プロシージャの再帰的使用による魔方陣の自動生成
第8話 4次魔方陣の全生成を可能にするコード例
Module Module1
Dim cn, mah(5, 5), n As Integer
Sub Main() '私は社長だ。
Console.WriteLine ("これはすべてのn次方陣を求めるソフトです。")
Console.WriteLine ("何次の方陣を発生させるのかをnに入力し")
Console.WriteLine ("エンターするとn次方陣がすべて生成されます。")
Console.Write ("n=")
n = Console.ReadLine()
cn = 0
Dim hj, ow As Object
hj = Timer
f (0)
ow = Timer
Console.WriteLine("魔方陣生成にかかった時間は{0:f6}秒です。", ow - hj)
Console.WriteLine("生成された{0:d}次方陣は{1:d}個です。", n, cn)
End Sub
Sub f(g As Integer)
Dim i, j, k, h, w, x, y As Integer
y = Int(g / n)
x = g Mod n
For i = 0 To n * n - 1
If g = 0 Then mah(y, x) = i + 1
h = 1
If g > 0 Then
For j = 0 To g - 1
If mah(Int(j / n), j Mod n) = i + 1 Then
h = 0
Exit For
End If
Next
If h = 1 Then mah(y, x) = i + 1
End If
If h = 1 Then
If x = n - 1 Then
w = 0
For j = 0 To n - 1
w += mah(y, j)
Next
If w <> Int(n * (n * n + 1) / 2) Then h = 0
End If
End If
If h = 1 Then
If y = n - 1 Then
w = 0
For j = 0 To n - 1
w += mah(j, x)
Next
If w <> Int(n * (n * n + 1) / 2) Then h = 0
End If
End If
If h = 1 Then
If y = n - 1 And x = 0 Then
w = 0
For j = 0 To n - 1
w += mah(j, n - 1 - j)
Next
If w <> Int(n * (n * n + 1) / 2) Then h = 0
End If
End If
If h = 1 Then
If y = n - 1 And x = n - 1 Then
w = 0
For j = 0 To n - 1
w += mah(j, j)
Next
If w <> Int(n * (n * n + 1) / 2) Then h = 0
End If
End If
If h = 1 Then
If g + 1 < n * n Then
f (g + 1)
Else
cn += 1
For j = 0 To n - 1
For k = 0 To n - 1
’二桁への対応
If mah(j, k) < 10 Then Console.Write(" {0:d} ", mah(j, k))
If mah(j, k) >= 10 Then Console.Write("{0:d} ", mah(j, k))
Next
Console.WriteLine()
Next
Console.WriteLine()
End If
End If
Next
End Sub
End Module
4次魔方陣7040個の全生成が11分で可能になりました。
このソフトを魔方陣自動生成Ver.1と名付けることにしましょう。
バージョンは講義の進展と共に上がっていきます。
1つバージョンアップするだけで、数十倍から数万倍のスピードアップがされていきます。
以上をもちまして第10講を閉めると同時に、
Visual Studio Community 2017によるVB入門第1部を終了します。
講義はまだまだ続きます。
そして、第3部辺りでゲームプログラミングにも挑戦します。
第7話へ 第11講第1話へ
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc** c言語 c** 入門 初心者 基礎から応用まで
eclipse c** 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C**入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC**による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ