mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
additional handler for LazyGraph algorithms that search for paths
This commit is contained in:
parent
ddd3175185
commit
69d75de295
2 changed files with 10 additions and 3 deletions
11
lazyGraph.ml
11
lazyGraph.ml
|
|
@ -350,7 +350,9 @@ and ('id, 'e) came_from_edge =
|
|||
- consistent (ie, h(X) <= dist(X,Y) + h(Y)).
|
||||
Both the distance and the heuristic must always
|
||||
be positive or null. *)
|
||||
let a_star graph ?(ignore=fun v -> false)
|
||||
let a_star graph
|
||||
?(on_explore=fun v -> ())
|
||||
?(ignore=fun v -> false)
|
||||
?(heuristic=(fun v -> 0.))
|
||||
?(distance=(fun v1 e v2 -> 1.))
|
||||
~goal
|
||||
|
|
@ -373,6 +375,8 @@ let a_star graph ?(ignore=fun v -> false)
|
|||
(* data for this vertex *)
|
||||
let cell = nodes.map_get v' in
|
||||
if (not cell.cf_explored) || ignore v' then begin
|
||||
(* 'explore' the node *)
|
||||
on_explore v';
|
||||
cell.cf_explored <- true;
|
||||
match graph.force v' with
|
||||
| Empty -> next ()
|
||||
|
|
@ -420,9 +424,10 @@ let a_star graph ?(ignore=fun v -> false)
|
|||
(** Shortest path from the first node to the second one, according
|
||||
to the given (positive!) distance function. The path is reversed,
|
||||
ie, from the destination to the source. The int is the distance. *)
|
||||
let dijkstra graph ?(ignore=fun v -> false) ?(distance=fun v1 e v2 -> 1.) v1 v2 =
|
||||
let dijkstra graph ?on_explore ?(ignore=fun v -> false)
|
||||
?(distance=fun v1 e v2 -> 1.) v1 v2 =
|
||||
let paths =
|
||||
a_star graph ~ignore ~distance ~heuristic:(fun _ -> 0.)
|
||||
a_star graph ?on_explore ~ignore ~distance ~heuristic:(fun _ -> 0.)
|
||||
~goal:(fun v -> graph.eq v v2) ~start:v1 in
|
||||
let paths = Gen.start paths in
|
||||
try
|
||||
|
|
|
|||
|
|
@ -130,6 +130,7 @@ val dfs : ('id, 'v, 'e) t -> 'id -> ('id * 'v * int) Gen.t
|
|||
(** Lazy traversal in depth first *)
|
||||
|
||||
val a_star : ('id, 'v, 'e) t ->
|
||||
?on_explore:('id -> unit) ->
|
||||
?ignore:('id -> bool) ->
|
||||
?heuristic:('id -> float) ->
|
||||
?distance:('id -> 'e -> 'id -> float) ->
|
||||
|
|
@ -146,6 +147,7 @@ val a_star : ('id, 'v, 'e) t ->
|
|||
be positive or null. *)
|
||||
|
||||
val dijkstra : ('id, 'v, 'e) t ->
|
||||
?on_explore:('id -> unit) ->
|
||||
?ignore:('id -> bool) ->
|
||||
?distance:('id -> 'e -> 'id -> float) ->
|
||||
'id -> 'id ->
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue