diff options
| author | Kirill Petrashin <kirill8201@yandex.ru> | 2026-03-29 21:58:06 +0300 |
|---|---|---|
| committer | Kirill Petrashin <kirill8201@yandex.ru> | 2026-03-29 21:58:06 +0300 |
| commit | 893bd10dd20f9adeef1735b1a7a1b68bb18f7096 (patch) | |
| tree | 19947320c9f7a4db72cf68c8f9b7a2d4300e3e43 | |
| parent | a3d42f5b23df682e3386940b4d92632f9f4c60db (diff) | |
| download | astar-893bd10dd20f9adeef1735b1a7a1b68bb18f7096.tar.xz | |
Add a path_length() function
| -rw-r--r-- | path.c | 16 | ||||
| -rw-r--r-- | path.h | 2 |
2 files changed, 18 insertions, 0 deletions
@@ -258,6 +258,22 @@ size_t diagonal_distance(Position a, Position b) { return (size_t) hypot(one, two); } +size_t path_length(Path path, Position start, Position goal) { + size_t length = 0; + if (path != NULL) { + Position cur = goal; + while (cur.x != start.x || cur.y != start.y) { + if (cur.x - path[cur.y][cur.x].parent.x == 0 || cur.y - path[cur.y][cur.x].parent.y == 0) { + length += COST_ORTHOGONAL; + } else { + length += COST_DIAGONAL; + } + cur = path[cur.y][cur.x].parent; + } + } + return length; +} + void path_free(Path path, size_t height) { if (path == NULL) return; for (size_t i = 0; i < height; i++) { @@ -14,6 +14,8 @@ size_t diagonal_distance(Position a, Position b); void path_free(Path path, size_t height); +size_t path_length(Path path, Position start, Position goal); + /* Helper funcs for the visited array */ char **visited_new(size_t width, size_t height); void visited_clear(char **visited, size_t width, size_t height); |
