ブログ名

競技プログラミングやお歌のお話をする高菜です。

長方形に割られた漫画のコマの読む順序の定義

マンガ初心者の方に向けて、コマをどのような順序で読んでいけばよいのかをレクチャーしていく記事です。

こちらの問題を解いていきましょう!

仮定(暫定)

  • 各コマは(縦軸・横軸に平行な、以降断りません)長方形であり、簡単のため隣接する 2 つのコマは境界を共有する(つまり隙間は空いていない)とします。
  • また全てのコマの和集合も長方形であるとします。

さらに、四畳半型などいくつかのイレギュラーなコマ割りを除外していきたいのですが、ここですべて考えるのは難しいですから、議論が終わってから後出しで仮定を増やしていこうと思います。

コマ割りの定義

コマ全体の集合を葉とする構文木を順序木として作ることで、順序を定義しましょう。

構文木の全てのノードは、コマの集合であってその和集合が長方形を為すものであるとして、あるノード $x$ の子孫を再帰的に定義しましょう!

まずはこれを縦並びに可能な限り細かく分割し、その各成分を $A _ 1, \dots, A _ n$(ただし $1 \le n$)とおきます。*1

しかしこの通りに子を作るわけではありません。ひと手間です。$A _ i$ と $A _ {i + 1}$ がそれぞれ $2$ 要素以上に横並び分割可能であり、かつ $A _ i$ と $A _ {i + 1}$ それぞれの横並び分割の横座標がすべて一致するようなときに辺 $(A _ i, A _ {i + 1})$を張ってできるグラフを $G$ と置きます。

まずは $G$ の各連結成分 $y$ について、それが $x$ と異なるならばノードを付与し、$x$ の子と定義します。次に、$y$ を可能な限り横並び分割し、その各要素 $z$ について、それが $y$ と異なるならば $y$ の子とします。

以上の操作で $x$ の子が追加されなかった場合には、$x$ は葉であると定義します。

追加された仮定

上記の定義はあいまいさがないため、構文木の定義はかならず可能なのですが、各葉が 1 コマのみと対応していることは保証されていません。たとえば四畳半型のコマ割りの場合には、根は子を持ちませんが、根は $5$ つのコマを持ちます。

これが起きないという仮定(もう少し良い形に同値変形できたら教えていただきたいです。)を追加します。

まとめ

いかがでしたか?笑

これで、マンガ初心者の皆様も、安心ですね!

*1:なおコマの集合を縦並びに分割するというのは、その各成分の和集合が長方形であり、かつ横座標の範囲が等しいようなもんです。また $A _ 1, \dots, A _ n$ のように断りなく書いた場合には、縦座標について上から順にならんでいるとします。また横並び分割も同様に定義します。