私は部屋のコレクションを持っています。各部屋は、基本的な方向 (北、南、東、西) を介して 1 つ以上の他の部屋に接続されています。部屋は、A が B の西にある場合、B が A の東になるように接続されています。したがって、無向グラフ。次に、この部屋のコレクションを座標平面でグラフ化する必要があります。すべてのエッジは X 軸または Y 軸に平行でなければなりません。
私はいくつかの異なるアプローチを試しましたが、これまでのところ最も効果的だと思うのは次のとおりです。
- 「中心」を見つけて (0,0) を割り当てます (他のすべての部屋への最短経路の長さの合計が最小になる部屋)。これが本当に必要かどうかはわかりませんが、出力の中央揃えが容易になります。
- 中心 C から出て、遭遇した各部屋 R に座標 (X, Y) を割り当てます。ここで、P は C=>R を結ぶパスであり、座標平面上で最大の変位が生じます。X は、P に沿った正味の水平移動です。 、Y は P に沿った正味の垂直移動です。
次の方向のベクトルを想定します: 北 = [0,1] 南 = [0,-1] 東 = [1,0] 西 = [-1,0]