曼哈顿和欧几里得启发式检查相同的节点是否合乎逻辑?

问题描述 投票:0回答:0

所以我创建了一个应用程序,我必须使用 A* 算法找到从

startPos
endPos
的最短路线。我用两种最常见的启发式方法解决了这个问题:

1。曼哈顿距离

2。欧氏距离

他们不仅给我相同的路径,而且他们都探索相同的节点。有意义吗?

我计算距离的函数:

public static int manhattanDistance(int row1, int col1, int row2, int col2) {
    return Math.abs(row1 - row2) + Math.abs(col1 - col2);
} 
public static int euclideanDistance(int row1, int col1, int row2, int col2) {
    int dx = col2 - col1;
    int dy = row2 - row1;
    return (int) Math.sqrt(dx * dx + dy * dy);
}

一个例子是当我有网格时:

S0000001000
11001000010
00000000000
00100000001
0000010100E

开始位置

S = (0.0)
和结束位置
E = (4,10)

执行算法后我得到结果:

Calculating result using Manhattan Distance.
Nodes explored (33): (0, 0) (0, 1) (0, 2) (0, 3) (1, 2) (1, 3) (2, 2) (2, 3) (0, 4) (3, 3) (0, 5) (4, 3) (1, 5) (3, 4) (1, 6) (3, 5) (2, 6) (1, 7) (2, 7) (1, 8) (3, 6) (3, 7) (2, 8) (3, 8) (2, 9) (4, 8) (2, 10) (4, 9) (0, 8) (2, 1) (0, 9) (3, 1) (4, 1)
Path: (0, 0) (0, 1) (0, 2) (0, 3) (0, 4) (0, 5) (1, 5) (1, 6) (2, 6) (2, 7) (3, 7) (3, 8) (4, 8) (4, 9) (4, 10)

Calculating result using Euclidean Distance.
Nodes explored (33): (0, 0) (0, 1) (0, 2) (0, 3) (1, 2) (1, 3) (2, 2) (2, 3) (0, 4) (3, 3) (0, 5) (4, 3) (1, 5) (3, 4) (1, 6) (3, 5) (2, 6) (1, 7) (2, 7) (1, 8) (3, 6) (3, 7) (2, 8) (3, 8) (2, 9) (4, 8) (2, 10) (4, 9) (0, 8) (2, 1) (0, 9) (3, 1) (4, 1)
Path: (0, 0) (0, 1) (0, 2) (0, 3) (0, 4) (0, 5) (1, 5) (1, 6) (2, 6) (2, 7) (3, 7) (3, 8) (4, 8) (4, 9) (4, 10)

我们可以看到,不仅路径相同,而且节点以相同的顺序探索。应该这样吗?这样做有意义吗?所有场景都是这样吗?

java algorithm nodes a-star euclidean-distance
© www.soinside.com 2019 - 2024. All rights reserved.