すみません。A1はプログラムを見ながら説明を読むという前提で、かなり省略した記述に なってしまいました。この説明だけでプログラムをつくるには、チョット説明不足かもしれ ません。(解く楽しみは残った?) (補足) 以下の例題で「C1を始点とする最小のBittomapを作る場合」を説明します。 [例題] C10 | C9−C8−C11 【C】| 【A】 | 【B】 C1−C2−−C3−−C12−C13−C14−C16 | | 【D】| | C4−C6−C7 C15 | C5 (1) C1からたどって3分岐以上(Node[i][0]>=3)のNodeを探す。 −−>C3が見つかる (2) C3のポイントで図のように【A】【B】【C】【D】に分割して考える。 (3) 【A】のBitmap形式は、0001となります。 (4) 【B】【C】【D】は、この関数をrecursive callして作成する。 (以下のBitmap形式が作られる) 【B】 0101100000 【C】 11000000 【D】 10000100 (5) 【B】【C】【D】を比較して、小さい順にならべる。 (比較は、文字列比較と同様に、先頭から順番に比較する。短いときは00をpadding) −−> 【B】<【D】<【C】となる (6) 上記の比較結果をもとに、全体のBitmap形式 Lを作成する。 L : 0001 11 0101100000 10000100 11000000 ---- -- ---------- -------- -------- 【A】 C3 【B】 【D】 【C】 (蛇足)【D】が最小でない形式 (10010000) になると 全体も最小にはなりません。 L’: 0001 11 0101100000 10010000 11000000 (L < L’) -------- このようにして、始点が明示された場合に、最小のBitmap形式を寄せ集めて、より大きな Bitmap形式を作っていきます。標準形を求めるには、すべてのTerminal Nodeについて 上記のBitmap形式を求め、その中で最小のものを見つければよい。 この例題の標準形はC7を始点としてBitmap形式を作成した以下のものになります。 0001 10 00 11 0100 0101100000 11000000 C7C6 C4 C5 C3 C2C1 【B】 【C】