これから紹介するアルゴリズムを記述する上で基盤とするプログラムの説明をします。
需要は低いと思いますが、自分用ということで...
まずは問題の記述用ファイルから。
上のような問題に対して, 以下のファイルを作成します。
R
が行数(row)
C
が列数(column)
を表しています。
その下に, 行と列の制約をそれぞれ上(左)から書いていて、
行の制約については頭文字にr
を
列の制約については頭文字にc
をつけます。
一番最初のt
にはこの問題の補足情報を書いている行になります。
このt
はR
, C
, r
, c
以外ならどの文字でも構いません。
次に基盤プログラムについて
R×Cの二次元配列であるB
が盤面を表しています。
r行c列のマスについて
すでに埋まることが確定しているならば1を
すでに埋まらないことが確定しているならば-1を
未定のマスには0を, B[r][c]
に格納します。
get_puzzle
関数で, 上記の問題ファイルから, 問題情報の読み込みます。
(row_keys
, col_keys
にそれぞれ行の制約, 列の制約情報が入ります。)
printB
関数で盤面をターミナル上に出力します。
imageB
関数で盤面の画像を作成します。
こんな感じですかね。次回以降はこのプログラムを元に, アルゴリズムを実装していきたいと思います。
参考サイト:
Python/Matplotlibで長方形を描画
matplotlib | Notes on Science
早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話 - Qiita