kruskalのアルゴリズムでは、重みの降順でエッジをソートして選択します。
ここでは、データ構造(タプルのようなもの)を使用して、エッジを<source vertex,destination vertex, weight of edge between them>
として保存するとします。私たちは、重みを降順で並べ替えて選択します。
複数の最適なソリューションがある場合は、空港の数が少ない方を優先します。したがって、1つ以上のフィールド(タイプboolean
と言う)をデータ構造に追加して、宛先頂点(都市)に空港がある場合に格納します。これは<source vertex,destination vertex, weight of edge between them, has_destination_an_airport>
のようになります。目的地頂点(都市)に空港がある場合はhas_destination_an_airport
はtrue
、それ以外の場合はfalse
です。
ここで、重みの降順に並べ替えるとき、重みが同じであれば、空港を持たないもの、可能であればhas_destination_an_airport
はfalse
です。
を正しく実装すると、エッジをソートすると、の魔法が実行されます。
漸近的な時間と空間の複雑さに関する限り、これはKruskalのアルゴリズムと同じです。オーバーヘッドだけが、目的地の頂点に空港がある場合に覚えておく余分なフィールドのオーバーヘッドです。これは簡単なことです。
ありがとう、それは私が探していた非常に単純で効率的なソリューションです。 –
@RuiLoureiro:お手伝いします!私の答えがまさにあなたが探していたものだと思うなら、それを合格とマークしてください。 –