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,
#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_complete(struct agar_state *sr);
+
+/*
+ * Bellman-Ford algorithm
+ */
+
+struct agar_state *agar_bellman_ford_new(void *ctx, struct agar_graph *gr,
+ const void *nr);
+
+bool agar_bellman_ford_path(struct agar_state *sr, const void *destr,
+ aga_icost_t *total_cost,
+ const void **prevr, const void **prevedge);
+void agar_bellman_ford_complete(struct agar_state *sr);
+
#endif /* CCAN_AGAR_H */