Go 在围棋中与迪杰斯特拉失之交臂

Go 在围棋中与迪杰斯特拉失之交臂,go,gis,dijkstra,path-finding,a-star,Go,Gis,Dijkstra,Path Finding,A Star,我目前是Go中的一个路径查找算法。我现在致力于让Dijkstra工作,因为这应该是关于路径查找的一个更简单的算法。然而,我很难把它做好。我的大多数测试结果都是无限循环 在我的测试中,我目前使用ESRI Shapefile作为源文件,并用它构建一个由顶点和边或节点和圆弧组成的图形,任何适合您的都可以。这似乎很有效,但目前有点缺乏记忆 我开始根据这个例子建立一个似乎有效的模型。但一旦我根据我的需要调整了它,这是真实世界的坐标,顶点上没有id,似乎有点不对劲 我正在遭受的部分a的相关代码: 我问自己的

我目前是Go中的一个路径查找算法。我现在致力于让Dijkstra工作,因为这应该是关于路径查找的一个更简单的算法。然而,我很难把它做好。我的大多数测试结果都是无限循环

在我的测试中,我目前使用ESRI Shapefile作为源文件,并用它构建一个由顶点和边或节点和圆弧组成的图形,任何适合您的都可以。这似乎很有效,但目前有点缺乏记忆

我开始根据这个例子建立一个似乎有效的模型。但一旦我根据我的需要调整了它,这是真实世界的坐标,顶点上没有id,似乎有点不对劲

我正在遭受的部分a的相关代码:

我问自己的主要问题是,我是否做得对,还是我只是走了几英里?我怎样才能做到这一点?还是我更适合尝试实现像*


还有,;我正在尝试使用的相关形状文件:100MB zip

Dijkstra's好吧,如果你正在进行头发分割,UCS实际上只是一个*,启发式总是设置为空启发式,因此不,你在那里不会有更好的运气。你有没有理由不能映射坐标->ID以便使用另一个?这就是大多数graph软件包让您做的事情,例如,github.com/gonum/graph就是这样做的too@Jsor,感谢您提供有关Dijkstra/A*的信息。我目前使用坐标作为ID,如您在此处所见:。您提到的软件包看起来很不错,但我没有看到任何文档或示例,因为我对golang很陌生。@AlexvandenHoogen,也可以看到@thwd,我确实看到了所有这些,但找不到适合我需要的好实现。或者至少我没看到。我唯一能试用的可能是。
const MAX_LENGTH = 1000000
type MinDistanceFromSource map[*Vertex]float64

func (G *Graph) Dijkstra(source, destination *Vertex) MinDistanceFromSource {
    D := make(MinDistanceFromSource)
    for _, vertex := range G.Vertexes {
        D[vertex] = MAX_LENGTH
    }

    D[source] = 0

    for edge := range source.GetAdjacentEdges() {
        D[edge.Destination] = edge.Length
    }

    // calculateDistance(source, destination, D) // Fix me...?

    for _, vertex := range G.Vertexes {
        vertex.visited = false // fixme
    }

    return D
}