func (g *TileGraph) Cost(e graph.Edge) float64 { if edge := g.EdgeBetween(e.Head(), e.Tail()); edge != nil { return 1 } return inf }
func (g *Graph) Cost(e graph.Edge) float64 { if n, ok := g.neighbors[e.Head().ID()]; ok { if we, ok := n[e.Tail().ID()]; ok { return we.Cost } } return inf }
func (g *DirectedGraph) Cost(e graph.Edge) float64 { if s, ok := g.successors[e.Head().ID()]; ok { if we, ok := s[e.Tail().ID()]; ok { return we.Cost } } return inf }
func (g *Graph) RemoveUndirectedEdge(e graph.Edge) { head, tail := e.Head(), e.Tail() if _, ok := g.nodeMap[head.ID()]; !ok { return } else if _, ok := g.nodeMap[tail.ID()]; !ok { return } delete(g.neighbors[head.ID()], tail.ID()) delete(g.neighbors[tail.ID()], head.ID()) }
func (g *DirectedGraph) RemoveDirectedEdge(e graph.Edge) { head, tail := e.Head(), e.Tail() if _, ok := g.nodeMap[head.ID()]; !ok { return } else if _, ok := g.nodeMap[tail.ID()]; !ok { return } delete(g.successors[head.ID()], tail.ID()) delete(g.predecessors[tail.ID()], head.ID()) }
func (g *Graph) AddUndirectedEdge(e graph.Edge, cost float64) { head, tail := e.Head(), e.Tail() if !g.NodeExists(head) { g.AddNode(head) } if !g.NodeExists(tail) { g.AddNode(tail) } g.neighbors[head.ID()][tail.ID()] = WeightedEdge{Edge: e, Cost: cost} g.neighbors[tail.ID()][head.ID()] = WeightedEdge{Edge: e, Cost: cost} }
// Sets the cost of an edge. If the cost is +Inf, it will remove the edge, // if directed is true, it will only remove the edge one way. If it's false it will change the cost // of the edge from succ to node as well. func (g *DenseGraph) SetEdgeCost(e graph.Edge, cost float64, directed bool) { g.adjacencyMatrix[e.Head().ID()*g.numNodes+e.Tail().ID()] = cost if !directed { g.adjacencyMatrix[e.Tail().ID()*g.numNodes+e.Head().ID()] = cost } }
func (g *DenseGraph) Cost(e graph.Edge) float64 { return g.adjacencyMatrix[e.Head().ID()*g.numNodes+e.Tail().ID()] }