寒假補充專案-回溯法走迷宮
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
#define MaxSize 100
int maze[10][10] = //定義一個迷宮,0表示通道,1表示牆
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,1,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
struct Try //定義一個棧,儲存路徑
{
int i; //當前方塊的行號
int j; //當前廣場的列號
int d; //di是下一可走方位的方位號
} path[MaxSize]; //定義棧
int top = -1; //初始化棧指標
void findPath(int xb, int yb, int xe, int ye) //路徑為從(xb,yb)到(xe,ye)
{
int i, j, d, find, k;
top++; //初始方塊進棧
path[top].i = xb;
path[top].j = yb;
path[top].d = -1;
maze[xb][yb] = -1;
while(top>-1) //棧不為空時迴圈
{
i = path[top].i;
j = path[top].j;
d = path[top].d;
if(i==xe && j==ye) //找到了出口,輸出路徑
{
cout << "迷宮路徑如下:\n";
for(k=0; k<=top; k++)
{
cout << "\t(" << path[k].i << "," << path[k].j << ")";
if((k+1)%5==0) cout << endl; //每輸出五個方塊後換一行
}
cout << endl;
return;
}
find = 0;
while(d<4 && find==0) //找下一個可走的點
{
d++;
switch(d)
{
case 0: //向上
i = path[top].i-1;
j = path[top].j;
break;
case 1: //向右
i = path[top].i;
j = path[top].j+1;
break;
case 2: //向下
i = path[top].i+1;
j = path[top].j;
break;
case 3: //向左
i = path[top].i;
j = path[top].j-1;
break;
}
if(maze[i][j]==0) find = 1; //找到通路
}
if(find==1) //找到了下一個可走方塊
{
path[top].d = d; //修改原棧頂元素的d值
top++; //下一個可走方塊進棧
path[top].i = i;
path[top].j = j;
path[top].d = -1;
maze[i][j] = -1; //避免重複走到這個方塊
//cout << "\t(" << path[top].i << "," << path[top].j << ")"; //顯示經過的試探
}
else //沒有路可走,則退棧
{
maze[path[top].i][path[top].j] = 0; //讓該位置變成其它路徑可走方塊
top--;
}
}
cout << "沒有可走路徑!\n";
}
int main()
{
findPath(1,1,8,8); //從(1,1)入,(8,8)出
return 0;
}
相關文章
- 回溯法求迷宮問題
- 回溯法解決迷宮問題
- 走迷宮
- c++迷宮問題回溯法遞迴演算法C++遞迴演算法
- 寒假補充專案-雜湊法的儲存與查詢(開發地址法)
- 藍橋杯-走迷宮(BFS)
- 自動走迷宮小遊戲~遊戲
- C語言動態走迷宮C語言
- 回溯和遞迴實現迷宮問題(C語言)遞迴C語言
- 【ybt高效進階1-5-1】走迷宮
- [SDOI2012] 走迷宮 題解
- 509迷宮
- 尋路者華為雲:在產業AI迷宮裡走直線產業AI
- Python專案實戰:20行程式設計迷宮大陣Python行程程式設計
- 走迷宮 -- 民間圖靈獎參賽者名單和作品圖靈
- 簡單介紹Python迷宮生成和迷宮破解演算法Python演算法
- # 計算機軟體技術實習日誌專案三(二) 迷宮專案實現計算機
- PHP 生成迷宮路線PHP
- 【面試】如何找到迷宮出口面試
- 強化學習入門之智慧走迷宮-策略迭代演算法強化學習演算法
- 走迷宮從2011算出2012的SQL程式碼SQL
- PHP 解迷宮之 H 最小PHP
- Python迷宮生成器Python
- POJ3984-迷宮問題
- PARL原始碼走讀——使用策略梯度演算法求解迷宮尋寶問題原始碼梯度演算法
- 用Q-learning演算法實現自動走迷宮機器人演算法機器人
- 強化學習入門之智慧走迷宮-價值迭代演算法強化學習演算法
- 內容是超正統的迷宮RPG?PSP遊戲《迷宮旅人2》深度解析遊戲
- 寒假專案2-猴子選大王
- PHP 解迷宮之 G + H 最小PHP
- 用 Canvas + WASM 畫一個迷宮CanvasASM
- 51nod 1459 迷宮遊戲遊戲
- 隨機迷宮生成演算法隨機演算法
- 如何用程式解圖片迷宮?
- 藍橋杯-迷宮(BFS+DFS)
- 回溯法
- 解密迷宮問題:三種高效演算法Java實現,讓你輕鬆穿越未知迷宮解密演算法Java
- Golang基礎語法補充Golang