path_finder.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /****** path_finder.c ***********************************************
  2. This recursive function traces the least cost path backwards
  3. to cells from which the cumulative cost was determined
  4. *********************************************************************/
  5. #include <grass/segment.h>
  6. #include "local_proto.h"
  7. void path_finder(int row, int col, int backrow, int backcol)
  8. {
  9. int data, new_backrow, new_backcol;
  10. extern char *value;
  11. extern int nrows, ncols;
  12. extern SEGMENT in_row_seg, in_col_seg, out_seg;
  13. if (row < 0 || row >= nrows || col < 0 || col >= ncols)
  14. return; /* outside the window */
  15. /* if the pt has already been traversed, return */
  16. value = (char *)&data;
  17. segment_get(&out_seg, value, row, col);
  18. if (data == 1)
  19. return; /* already traversed */
  20. /* otherwise, draw a line on output */
  21. drawline(row, col, backrow, backcol);
  22. /*DEBUG
  23. printf("\nrow=%d, col=%d, backrow=%d, backcol=%d", row, col, backrow, backcol);
  24. */
  25. /* update path position */
  26. if (row == backrow && col == backcol) {
  27. printf("\n");
  28. return;
  29. } /* reach an origin */
  30. value = (char *)&new_backrow;
  31. segment_get(&in_row_seg, value, backrow, backcol);
  32. value = (char *)&new_backcol;
  33. segment_get(&in_col_seg, value, backrow, backcol);
  34. path_finder(backrow, backcol, new_backrow, new_backcol);
  35. return;
  36. }