用遞迴思想解迷宮問題

2021-06-19 22:58:06 字數 1767 閱讀 8914

#include

#define max_row    8

#define max_col    8

int flag = 0;

typedef struct point

point;

int maze[max_row][max_col] = ;

point footprints[max_row][max_col] = ,,,,,,,},

,,,,,,,},

,,,,,,,},

,,,,,,,},

,,,,,,,},

,,,,,,,},

,,,,,,,},

,,,,,,,},

};void print_maze(void)

printf("\n");

}printf("\n*****************************************  \n");

}void print_foots(void)

;while(footprints[p.row][p.col].row != -1)/*footprints[p.row][p.col]記錄p點的上乙個點的座標*/

\n", p.row, p.col);/*倒序列印走出 迷宮的每乙個點座標*/

p = footprints[p.row][p.col];

printf(" \n", p.row, p.col);/*倒序列印走出 迷宮的每乙個點座標*/

}printf("seccess out ! \n");

}void print(void)

,", footprints[i][j].row, footprints[i][j].col);

}printf("\n");

}printf("\n");

}void visitpoint(point p)

if((p.row+1 < max_row) && (maze[p.row+1][p.col] == 0))

;maze[p.row+1][p.col] = 2;

footprints[p.row+1][p.col] = p;

visitpoint(temppoint);

}if((p.col+1 < max_col) && (maze[p.row][p.col+1] == 0))

;maze[p.row][p.col+1] = 2;

footprints[p.row][p.col+1] = p;

visitpoint(temppoint);

}if((p.row-1 >= 0) && (maze[p.row-1][p.col] == 0))

;maze[p.row-1][p.col] = 2;

footprints[p.row-1][p.col] = p;

visitpoint(temppoint);

}if((p.col-1 >= 0) && (maze[p.row][p.col-1] == 0))

;maze[p.row][p.col-1] = 2;

footprints[p.row][p.col-1] = p;

visitpoint(temppoint);

}return;

}int main(void)

;/*出發點*/

maze[p.row][p.col] = 2;/*訪問過的點標記為2*/

visitpoint(p);

if(flag)

else

return    0;

}

資料結構 遞迴思想及遞迴實現迷宮問題

遞迴 就是自己呼叫自己,然後一層層返回 乙個簡單的例子 列印問題 public static void main string args 列印問題 我們可以分析這個程式的執行過程 程式的方法在虛擬機器的棧空間執行 這就是遞迴的過程 有這樣乙個迷宮,從起點到終點,紅色是牆,黃色的是路,可以走,一次走一...

用遞迴寫迷宮

題目要求 輸入三個數,n m n和m表示迷宮的n行m列 當輸入m和n為0時結束輸入。起點用 s 表示,終點用 d 表示,牆壁用 x,表示可走路徑。例如 輸出 如果能找到路徑到出口則輸出路徑,否則輸出 no 解題思路 使用深度優先搜尋 dfs include using namespace std i...

遞迴迷宮問題

這裡我們有乙個地圖 用二維陣列表示 小球位於地圖的起始點 也就是map 1 1 這個位置 然後小球通過進行迴圈判斷小球當前位置的上下左右是否能走,如果能走則在走之前把之前的位置標記為2,代表有路可走,如果上下左右都沒有路則把當前位置標記為3,代表無路可走,直到找到地圖的目的地,也就是map 6 5 ...