看到曼哈頓距離就不難想到可以與切比雪夫距離進行轉換。
切比雪夫距離:
平面上兩個點$(x1,y1),(x2,y2)$ 之間的距離為$max(|x1-x2 | , | y1 - y2 |)$.
如何轉換呢?考慮把原來的坐標系旋轉45°,原來的坐標$(x,y)$就變成了$(x+y,x - y )$
然后原圖上兩點的曼哈頓距離就變成了切比雪夫距離了。
在轉換之后,我們就可以轉化成對於兩個點其中一維的差值剛好為D,另一維度為<=D
為了方便討論,我們先假設x差值為D,
這樣來討論:
$x1−x2=D$
$−D≤y1−y2≤D$
我們固定了一維x,那么另外一維y就處於一個范圍內,我們就可以快速的處理每一個點有多少與之曼哈頓距離為D的節點了。
具體實現是按照x排序,如果x相同就按照y排序。
然后我們只需要找一個點x的兩個距離為D的點,$x+D$和$ x-D$,對應有多少個y之差小於等於D