Module Pathfind

type 'node problem = {
  1. neighbors : 'node -> ('node * float) list;
  2. goal : 'node -> bool;
  3. estimate : 'node -> float;
}
type 'node result = {
  1. path : 'node list;
  2. cost : float;
  3. visited : 'node list;
}
val breadth_first : 'node problem -> 'node -> 'node result
val dijkstra : 'node problem -> 'node -> 'node result
val astar : 'node problem -> 'node -> 'node result
val field : 'node problem -> 'node -> ('node * float) list
val downhill : 'node problem -> ('node * float) list -> 'node -> 'node option
val manhattan : (int * int) -> (int * int) -> float