# UniformCostVisitor Concept

This concept defines the visitor interface for `uniform_cost_search()` and related algorithms. The user can create a class that matches this interface, and then pass objects of the class into `uniform_cost_search()` to augment the actions taken during the search.

### Refinement of

none

### Notation

`V` | A type that is a model of UniformCostVisitor.
`vis` | An object of type `V`.
`G` | A type that is a model of Graph.
`g` | An object of type `G`.
`e` | An object of type `boost::graph_traits<G>::edge_descriptor`.
`s,u,v` | An object of type `boost::graph_traits<G>::vertex_descriptor`.
`DistanceMap` | A type that is a model of ReadWritePropertyMap.
`d` | An object of type `DistanceMap`.
`WeightMap` | A type that is a model of ReadablePropertyMap.
`w` | An object of type `DistanceMap`.

### Associated Types

none

### Valid Expressions

Name | Expression | Return Type | Description
--- | --- | --- | ---
Initialize Vertex | `vis.initialize_vertex(u, g)` | `void` | This is invoked one each vertex of the graph when it is initialized.
Start Vertex | `vis.start_vertex(u, g)` | `void` | This is invoked on the source vertex at the beginning of the algorithm.
Discover Vertex | `vis.discover_vertex(u, g)` | `void` | This is invoked when a vertex is encountered for the first time.
Examine Edge | `vis.examine_edge(e, g)` | `void` | This is invoked on every out-edge of each vertex after it is discovered.
Edge Relaxed | `vis.edge_relaxed(e, g)` | `void` | Upon examination, if the following condition holds then the edge is relaxed (its distance is reduced), and this method is invoked. `tie(u,v) = incident(e, g); D d_u = get(d, u), d_v = get(d, v); W w_e = get(w, e); assert(compare(combine(d_u, w_e), d_v));`
Edge Not Relaxed | `vis.edge_not_relaxed(e, g)` | `void` | Upon examination, if the edge is not relaxed (see above) then this method is invoked.
Finish Vertex | `vis.finish_vertex(u, g)` | `void` | This invoked on a vertex after all of its out edges have been added to the search tree and all of the adjacent vertices have been discovered (but before their out-edges have been examined).

### Models

- `ucs_visitor`

Copyright © 2000 | Jeremy Siek, Univ.of Notre Dame (jsiek@lsc.nd.edu) Lie-Quan Lee, Univ.of Notre Dame (llee1@lsc.nd.edu) Andrew Lumsdaine, Univ.of Notre Dame (lums@lsc.nd.edu)