/****** path_finder.c *********************************************** This recursive function traces the least cost path backwards to cells from which the cumulative cost was determined *********************************************************************/ #include #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; }