// Copyright ©2015 The gonum Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package path import ( "math" "gonum.org/v1/gonum/graph" ) // Weighting is a mapping between a pair of nodes and a weight. It follows the // semantics of the Weighter interface. type Weighting func(x, y graph.Node) (w float64, ok bool) // UniformCost returns a Weighting that returns an edge cost of 1 for existing // edges, zero for node identity and Inf for otherwise absent edges. func UniformCost(g graph.Graph) Weighting { return func(x, y graph.Node) (w float64, ok bool) { xid := x.ID() yid := y.ID() if xid == yid { return 0, true } if e := g.Edge(x, y); e != nil { return 1, true } return math.Inf(1), false } } // Heuristic returns an estimate of the cost of travelling between two nodes. type Heuristic func(x, y graph.Node) float64 // HeuristicCoster wraps the HeuristicCost method. A graph implementing the // interface provides a heuristic between any two given nodes. type HeuristicCoster interface { HeuristicCost(x, y graph.Node) float64 }