27 lines
574 B
Go
27 lines
574 B
Go
package astar
|
|
|
|
import "github.com/kercylan98/minotaur/utils/generic"
|
|
|
|
type path[Node comparable, V generic.SignedNumber] []Node
|
|
|
|
// 获取末位元素
|
|
func (p path[Node, V]) last() Node {
|
|
return p[len(p)-1]
|
|
}
|
|
|
|
// 将 n 追加到末位,返回新的路径,不影响原始路径
|
|
func (p path[Node, V]) cont(n Node) path[Node, V] {
|
|
cp := make([]Node, len(p), len(p)+1)
|
|
copy(cp, p)
|
|
cp = append(cp, n)
|
|
return cp
|
|
}
|
|
|
|
// cost 计算路径总消耗
|
|
func (p path[Node, V]) cost(d func(a, b Node) V) (c V) {
|
|
for i := 1; i < len(p); i++ {
|
|
c += d(p[i-1], p[i])
|
|
}
|
|
return c
|
|
}
|