我知道 dijkstra、prim、kruskal 等算法,但我不知道如何解决以下问题。
我有一个具有整数值的城市列表。我有一个函数,它根据传递的距离范围计算给定城市的距离。如果您将一个城市传递给函数,并且距离为 20 公里,则将返回与给定城市距离为该距离的所有城市。
条件:
- 我想将所有大于给定值限制的城市设置为父级。
- 如果一个父城市在给定距离内有另一个价值更大的城市父城市,则设置为价值更大的城市父城市和价值较小的子城市。
- 对于所有子城市,将在给定距离内具有更多价值的城市父级设置为父级,如果没有父级城市,则子级城市将没有父级。
对不起,如果我不能很好地解释我。
编辑:
我添加了一些伪代码来帮助您解决问题:
//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);
}
}
}
}