此时六个方向
0
−
5
0-5
0−5 可以用如下数组操作:
i
n
t
[
]
[
]
d
i
r
s
=
n
e
w
i
n
t
[
]
[
]
−
1
,
0
,
−
1
,
1
,
0
,
1
,
1
,
0
,
1
,
−
1
,
0
,
−
1
;
int[][] dirs = new int[][]{{-1, 0}, {-1, 1}, {0, 1}, {1, 0}, {1, -1}, {0, -1}};
int[][]dirs=newint[][]−1,0,−1,1,0,1,1,0,1,−1,0,−1; 往
0
0
0方向,走x坐标减一;往
1
1
1 方向走,x坐标减一,y坐标加一;往
2
2
2方向走,y坐标加一;往
3
3
3 方向走,x坐标加1;往
4
4
4 方向走,则x坐标加一,y坐标减一;往
5
5
5方向走则y坐标减一。
然后,我们现在只关心让第一个点
(
x
1
,
y
1
)
(x1,y1)
(x1,y1) 作为左边的点(例如图中
B
B
B 点),让第二点
(
x
2
,
y
2
)
(x2,y2)
(x2,y2) 为在右边的点(例如图中
C
C
C 点),然后我们只要考虑两种情况:
当第一个点在第二点左上方时,途中
B
B
B 和
C
C
C 点的位置关系,此时
B
B
B 点在坐标中的位置是
(
−
5
,
3
)
(-5,3)
(−5,3),而
C
C
C点位置为
(
2
,
1
)
(2,1)
(2,1) ,从左上往右下走,x坐标在加,y坐标在减,故此时最短距离为
B
B
B从左上向右下走2步到达
(
−
3
,
1
)
(-3,1)
(−3,1) ,再向右走5步就能到达
C
C
C点,此时有
a
=
M
a
t
h
.
a
b
s
(
−
5
−
2
)
=
7
,
b
=
M
a
t
h
.
a
b
s
(
3
−
1
)
=
2
a = Math.abs(-5-2)=7,b=Math.abs(3-1)=2
a=Math.abs(−5−2)=7,b=Math.abs(3−1)=2,故此时距离为
d
i
s
=
M
a
t
h
.
m
a
x
(
a
,
b
)
=
7
dis = Math.max(a,b)=7
dis=Math.max(a,b)=7 ,即能得到此时两点的距离公式为
d
i
s
t
=
M
a
t
h
.
m
a
x
(
M
a
t
h
.
a
b
s
(
x
1
−
x
2
)
,
M
a
t
h
.
a
b
s
(
y
1
−
y
2
)
)
dist = Math.max(Math.abs(x1-x2), Math.abs(y1-y2))
dist=Math.max(Math.abs(x1−x2),Math.abs(y1−y2))。
当第一个点在第二个点左下方时,图中
O
O
O 点和
C
C
C 点的位置关系,此时
O
O
O 点坐标为
(
0
,
0
)
(0, 0)
(0,0) ,
C
C
C 点坐标为
(
2
,
1
)
(2, 1)
(2,1),此时
O
O
O 点到
C
C
C 点最短距离为
O
O
O 先向右走两步,再向上(Y)走一步到达
C
C
C ,此时有
a
=
M
a
t
h
.
a
b
s
(
0
−
2
)
=
2
,
b
=
M
a
t
h
.
a
b
s
(
0
−
1
)
=
1
a = Math.abs(0-2)=2, b = Math.abs(0-1)=1
a=Math.abs(0−2)=2,b=Math.abs(0−1)=1,故此时距离为
d
i
s
=
a
+
b
=
3
dis = a + b = 3
dis=a+b=3,即此时距离公式为
d
i
s
t
=
M
a
t
h
.
a
b
s
(
x
1
−
x
2
)
+
M
a
t
h
.
a
b
s
(
y
1
−
y
2
)
dist = Math.abs(x1-x2) + Math.abs(y1-y2)
dist=Math.abs(x1−x2)+Math.abs(y1−y2)。
当第一个点在第二点的左方时放过来即可(比如
B
B
B 在
C
C
C 的右上方等价于
C
C
C 在
B
B
B 的左下方,
B
B
B 在
C
C
C 的右下方等价于
C
C
C在
B
B
B 的左上方)。