C言語でアルゴリズムの勉強 魔方陣

アルゴリズムと二次元配列の勉強用に使えます。魔方陣の作り方は下記URLを参考にしています。

前提:

5 × 5マスの固定の魔方陣です。
マスの数を入力値によって可変にするのは、少し難しいので、今回は固定としています。

必要な知識:

・変数
・分岐処理(if、else構造)
・繰り返し処理(forでもwhileでも可)
・二次元配列

大きな流れ:

3つの大きな処理を最初に考えます。

1.初期化(ポイントで述べます)

2.魔方陣の作成

3.魔方陣の表示

アルゴリズムを考える際には、上記のように、大きな流れを考えてから、少しずつ細分化していきます。

初心者は、全部をを1つの処理でまとめようとしてしまいます。
それが失敗のもとです。
大→小へと考え、少しずつ細分化していきましょう。

ポイント:

アルゴリズムを考えるにあたって、初期処理と⑥⑦がポイントです。

初期処理では2つの処理を実行します。
まず、すべてのマス目を初期値で埋めることです。
魔方陣で絶対に登場しない値(例:0)で配列を初期化します。
つまり、値が0ということは、まだ未挿入という意味です。
配列宣言だけで自動的に初期化してくれる言語では不要です。

次に、1を入れる位置を決めて、1を書き込みます。
この処理は、上記「大きな流れ」の「2.魔方陣の作成」に組み込んでしまうと処理が難しくなります。
ですから、初期化処理の中で行います。

⑥は次に入れたい位置が既にふさがっていた場合の処理です。
元の位置を別の変数に退避しておき、いつでも戻れるようにします。

⑦は縦、横いずれもが配列からはみ出した場合の処理です。
配列外に添え字がはみ出していないかどうかを判定する関数を作ると便利かもしれません。

これらをクリアできれば、あとはルール通りに入れていくだけです。

C言語での解答例:

私はC言語しか知らないので、Cでの解答例です。

​最後までお読みいただき、ありがとうございます。

もし気に入っていただけたら「スキ」を押していただけると嬉しいです。

いただいたサポートは、おじさんの活動費としてとんでもなく有用に使われる予定です。