common.c (876B)
1 #include "common.h" 2 3 size_t idx(size_t row, size_t col, size_t ncols) { return row * ncols + col; } 4 5 int walkable(char **lines, size_t r, size_t c) { 6 return lines[r][c] == '.' || lines[r][c] == '<' || lines[r][c] == '>' || 7 lines[r][c] == '^' || lines[r][c] == 'v'; 8 } 9 10 /** 11 * This is a terrible solution, essentially 12 * brute force, recursively. Could replace with 13 * dyn.prog. 14 */ 15 void recursive_longest_path(uint8_t *visited, size_t node, size_t end, 16 size_t steps, const dg_t *g, size_t *l) { 17 size_t i; 18 visited[node] = 1; 19 20 if (node == end) { 21 if (*l < steps) { 22 *l = steps; 23 } 24 } else { 25 for (i = 0; i < g->nbrs[node].nmemb; i++) { 26 size_t nbr = g->nbrs[node].data[i]; 27 if (visited[nbr] == 0) { 28 recursive_longest_path(visited, nbr, end, steps + 1, g, l); 29 } 30 } 31 } 32 33 visited[node] = 0; 34 }