diff options
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; |
