diff options
| author | Kirill Petrashin <kirill8201@yandex.ru> | 2026-04-22 20:48:27 +0300 |
|---|---|---|
| committer | Kirill Petrashin <kirill8201@yandex.ru> | 2026-04-22 20:48:27 +0300 |
| commit | 55b10d144a6855791f3918f37ccdf36fd8109e58 (patch) | |
| tree | 788897d35fe3eec8751a3fd4c3958941126d8709 /path.c | |
| parent | 1cd0a30593d9b7805752e3e183c93f622211ed0b (diff) | |
| download | astar-55b10d144a6855791f3918f37ccdf36fd8109e58.tar.xz | |
Add a path_reverse() function
Diffstat (limited to 'path.c')
| -rw-r--r-- | path.c | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -330,6 +330,29 @@ void path_free(Path path, size_t height) { free(path); } +void path_reverse(Path *path, size_t width, size_t height, Position *start, Position *end) { + Path new_path = path_new(width, height); + + Position cur = *end; + while (cur.x != start->x || cur.y != start->y) { + Position parent = (*path)[cur.y][cur.x]; + new_path[parent.y][parent.x] = cur; + cur = parent; + } + + /* Switch start and end around */ + start->x = start->x ^ end->x; + end->x = start->x ^ end->x; + start->x = start->x ^ end->x; + + start->y = start->y ^ end->y; + end->y = start->y ^ end->y; + start->y = start->y ^ end->y; + + path_free(*path, height); + *path = new_path; +} + char **visited_new(size_t width, size_t height) { char **visited = malloc(sizeof(char*) * height); if (visited == NULL) return NULL; |
