dijkstra、prim、kruskal などのアルゴリズムは知っていますが、次の問題を解決する方法がわかりません。
整数値を持つ都市のリストがあります。渡された距離範囲に応じて、特定の都市の距離を計算する関数があります。関数に都市と距離 20km を渡すと、与えられた都市からその距離にあるすべての都市が返されます。
条件:
- 指定された値を超えるすべての都市を親として設定したいと考えています。
- 親都市に、指定された距離内に値の大きい別の親都市がある場合は、値の大きい都市を親都市、値の小さい子都市として設定します。
- すべての子都市について、指定された距離内でより多くの値を持つ都市の親を親として設定します。親都市がない場合、子都市には親がありません。
うまく説明できなくてすみません。
編集:
答えを見つけるのに役立つように、いくつかの疑似コードを追加しました。
//Get array of cities ordered ASC by value and each city is marked as parent or not.
$cities = getCitiesByValue();
foreach($cities as $city) {
if($city->isParent) {
//Get near(20km) PARENT cities ordered ASC
$nearCities = findNearBy($city, $distance = 20);
foreach($nearCities as $nearCity) {
if($nearCity->value > $city->value) {
$city->setParent($nCity);
$city->setAsChild;
}
}
}
elseif($city->isChild) {
//Get near(50km) PARENT cities ordered ASC
$nearCities = findNearBy($city, $distance = 50);
foreach($nearCities as $nearCity) {
if($nearCity->value > $city->value) {
$city->setParent($nCity);
}
}
}
}