X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fagar%2Fagar.h;h=abd11301e6f86abafabfdd5563e5ae9f4b67ddb8;hb=c23a40c7f1ac9fad0146b46988a41f196aae933f;hp=d63615add7e9d4e53e90f52a441b9b8bb54ed5a6;hpb=f9274cce2171d919d72fe9ec186320f85174b7e5;p=ccan diff --git a/ccan/agar/agar.h b/ccan/agar/agar.h index d63615ad..abd11301 100644 --- a/ccan/agar/agar.h +++ b/ccan/agar/agar.h @@ -31,6 +31,9 @@ struct agar_graph { agar_next_edge_fn next_edge; }; +#define AGAR_INIT_GRAPH(fe, ne, ei) \ + { (ei), (fe), (ne), } + void agar_init_graph(struct agar_graph *gr, agar_first_edge_fn first_edge, agar_next_edge_fn next_edge, @@ -71,4 +74,16 @@ bool agar_bfs_explore(struct agar_state *sr, const void *nr, #define agar_bfs(_nr, _sr, _startr) \ for ((_nr) = (_startr); agar_bfs_explore((_sr), (_nr), &(_nr)); ) +/* + * Dijkstra's algorithm + */ + +struct agar_state *agar_dijkstra_new(void *ctx, struct agar_graph *gr, + const void *nr); +bool agar_dijkstra_step(struct agar_state *sr, const void **nextr); +bool agar_dijkstra_path(struct agar_state *sr, const void *destr, + aga_icost_t *total_cost, + const void **prevr, const void **prevedge); +void agar_dijkstra_all_paths(struct agar_state *sr); + #endif /* CCAN_AGAR_H */