這似乎工作。 https://github.com/divinity76/onlinkshit/commit/15d24a48c73ea4a9298805bbfa3a6aa2d80e2460 有人看到有什麼問題嗎?
function sort_by_xy_distance($input_list)
{
$ret = array();
$a = $input_list[0];
array_push($ret, $input_list[0]);
$input_list[0] = null;
$i = 1;
for ($i = 1; $i < count($input_list); ++$i) {
// if ($input_list[$i] == null) {
// echo 'already added to list..';
// continue;
// }
$ii = 1;
$tmpdistance = 0;
$nearest = array(
'index' => -1,
'distance' => PHP_INT_MAX
);
for ($ii = 1; $ii < count($input_list); ++$ii) {
if ($input_list[$ii] == null || $ii == $i) {
//echo 'already added to list..';
continue;
}
$tmpdistance = abs($input_list[$ii]['x'] - $a['x']) + abs($input_list[$ii]['y'] - $a['y']);
if ($tmpdistance < $nearest['distance']) {
$nearest['index'] = $ii;
$nearest['distance'] = $tmpdistance;
}
}
assert($nearest['index'] != -1);
array_push($ret, $input_list[$nearest['index']]);
$a = $input_list[$nearest['index']];
$input_list[$nearest['index']] = null;
}
return $ret;
}
這裏完全複製真實的數據&膏可運行testcode:
http://pastebin.com/raw.php?i=ST3saHj2(太大張貼在計算器以其30000字符/後限制)
看着兩張貼由數字PHP,並在遊戲中看結果,它看起來像一切正確排序。找到最短的路徑。
X/Y是指球體(3d)上還是平坦表面(2d)上的座標?在平坦的表面上,Pytagoras會是你的朋友。對於全球你將需要更多的計算,Google會成爲你的朋友。 (或者我,但是你需要先告訴我你已經做了什麼。)還有,從你測量到所有地點的距離並對它們進行排序的地方,還有一個起點嗎? – 2015-03-02 12:23:13
平坦的表面,我猜。沒有Z,它看起來像這樣http://imagizer.imageshack.us/a/img537/1814/bUoiKP.jpg – hanshenrik 2015-03-02 12:26:09
看起來像地球儀。最近的研究已經證明,這不是一個平坦的表面。 (如果你向西走得太遠,你也不會從地球上掉下來)。要得到準確的距離,你必須相應地計算。 – 2015-03-02 12:28:29