aboutsummaryrefslogtreecommitdiff
path: root/path.c
diff options
context:
space:
mode:
Diffstat (limited to 'path.c')
-rw-r--r--path.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/path.c b/path.c
index d643167..19a9aaa 100644
--- a/path.c
+++ b/path.c
@@ -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;