自分用メモ

+--+--+--+--+
|  |  |  |  |
+--+--+--+--+
|  |  |  |  |
+--+--+--+--+
|  |  |  |  |
+--+--+--+--+
|  |  |  |  |
+--+--+--+--+

横線、縦線があるかどうかを bool 配列で表す。

bool horz[HT+1][WD];
bool vert[HT][WD+1];

端っこの処理をそれ以外と共通にするために、上下左右にひとマス分余計に要素を確保しておけばおkかな?
一つの頂点に接続する辺の数は、0, 2(90度のみ), 3, 4 ならOK

2*2 の場合でも、2*3*2 = 12 bit なので、2^12 = 4096
4*4 だと、4*5*2 = 40 bit にもなっちまうぞ

というわけで、マッチ棒の状態で回すのではなく、各マス目がマッチ棒で囲まれているかどうかで回すことにする。