1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- /****** path_finder.c ***********************************************
-
- This recursive function traces the least cost path backwards
- to cells from which the cumulative cost was determined
- *********************************************************************/
- #include <grass/segment.h>
- #include "local_proto.h"
- void path_finder(int row, int col, int backrow, int backcol)
- {
- int data, new_backrow, new_backcol;
- extern char *value;
- extern int nrows, ncols;
- extern SEGMENT in_row_seg, in_col_seg, out_seg;
- if (row < 0 || row >= nrows || col < 0 || col >= ncols)
- return; /* outside the window */
- /* if the pt has already been traversed, return */
- value = (char *)&data;
- segment_get(&out_seg, value, row, col);
- if (data == 1)
- return; /* already traversed */
- /* otherwise, draw a line on output */
- drawline(row, col, backrow, backcol);
- /*DEBUG
- printf("\nrow=%d, col=%d, backrow=%d, backcol=%d", row, col, backrow, backcol);
- */
- /* update path position */
- if (row == backrow && col == backcol) {
- printf("\n");
- return;
- } /* reach an origin */
- value = (char *)&new_backrow;
- segment_get(&in_row_seg, value, backrow, backcol);
- value = (char *)&new_backcol;
- segment_get(&in_col_seg, value, backrow, backcol);
- path_finder(backrow, backcol, new_backrow, new_backcol);
- return;
- }
|