ノードとノード間の行のリストがあります。次のようになります。
私が必要としているのは、ブロックを生成することです。この場合、次のようになります。block1:1,2,14,11 block2:2,13,12,14 block3:2,3,4,5,6,12,13ブロック4:6、7、12など..
誰かがこれのためのアルゴリズムを作成する方法を知っていますか?どうも
ノードとノード間の行のリストがあります。次のようになります。
私が必要としているのは、ブロックを生成することです。この場合、次のようになります。block1:1,2,14,11 block2:2,13,12,14 block3:2,3,4,5,6,12,13ブロック4:6、7、12など..
誰かがこれのためのアルゴリズムを作成する方法を知っていますか?どうも
まず、各ノードのエッジを時計回りに並べ替えることができます。(たとえば、キーatan2(dy、dx)に基づいて並べ替えます。ここで、dx、dyはエッジに沿ったベクトルです。)
次に、各エッジ(およびエッジに沿った両方向)を開始点として、ブロックの周りを反時計回りにエッジをたどります。
反時計回りに進むには、宛先ノードのソート済みリストで着信エッジを見つけ、リストの次のエッジに沿って終了します。
たとえば、エッジ11-> 14から始めた場合、ノード14に到達すると、次にエッジ14-> 2を取得することがわかります(ノード14のエッジは時計回りに14-> 12になるため) 、14-> 11、14-> 2)。開始ノードに到達すると、ブロックが識別されます。
同じブロックが2回生成されないように、エッジをフォローするときに使用済みとしてマークを付けることができます。(開始エッジがその方向で使用済みとしてすでにマークされている場合は、スキップします。)
これにより、背景領域で構成されるブロック0も生成されます。