老鼠走迷宮問題,求出所有路徑

2021-07-26 16:30:44 字數 1458 閱讀 2470

本次所練習使用的主要方法是遞迴

所要注意的主要問題是

要確定起訖點的相對位置,否則又由於遞迴**的順序會漏掉一些可行路徑

先橫向/縱向接近目標點,然後再橫向/縱向遠離目標點(最好對應)

例如: 假設訪問的順序是下上右左(相對於乙個固定的矩陣)

2 2 2 2 2 2 2 2 2

2 0 0 0 0 0 0 0 2

2 0 2 2 0 2 2 0 2

2 0 2 0 0 2 0 0 2

2 0 2 0 2 0 2 0 2

2 0 0 0 0 0 2 0 2

2 2 0 2 2 0 2 2 2

2 0 0 0 0 0 0 0 2

2 2 2 2 2 2 2 2 2

可能會忽略黃色所示的路徑

2 2 2 2 2 2 2 22

2 0 0 0 0 0 0 0 2

2 0 2 2 0 2 2 0 2

2 0 2 0 0 2 0 0 2

2 0 2 0 2 0 2 0 2

2 0 0 0 0 0 2 0 2

2 2 0 2 2 0 2 2 2

2 0 0 0 0 0 0 0 2

2 2 2 2 2 2 2 22

#include#include#include#includeusing namespace std;

int maze[200][200];

pairpath[500];

int cnt = 1, ptr = -1;//succ=0;

void print(int endpoint)

} if(j==3) printf("\n");

}void visit(int xp, int yp, int xaim, int yaim)

if (maze[xp ][yp+1] == 0)visit(xp, yp+1, xaim, yaim);

if (maze[xp +1][yp] == 0)visit(xp+1, yp, xaim, yaim);

if (maze[xp][yp -1] == 0)visit(xp, yp - 1, xaim, yaim);

if (maze[xp-1][yp] == 0)visit(xp-1, yp, xaim, yaim);

//if (succ == false)

};int main()

visit(1, 1, 7, 7);

system("pause");

return 0;

}

tips:

本**中用到了檔案流,檔案中儲存的迷宮如以上所述,讀者若要檢測自己的迷宮的話則要更改**的相應部分,包括檔案流的重新設定和遞迴順序的調整(本**檢測的起止點是從左上到右下,其他起止點相對順序要更改相應的遞迴順序)

本**還用到了字串流

**中注釋掉的部分是在練習過程中出錯的部分,僅供參考

求解迷宮問題的所有路徑及最短路徑程式

路障 路障路障 路障路障 路障路障 入口 路障路障路障 路障 路障路障 路障路障路障路障 出口 路障路障 路障路障 路障路障 路障如上圖,要求輸出迷宮的所有路徑,並求出最短路徑長度及最短路徑。入口座標設為 1,1 出口座標設為 4,4 親,接下來 include define m 4 行數 defi...

非遞迴求解迷宮所有路徑問題遇到的BUG

不知道有沒有人和我一樣,在用棧求解迷宮問題所有可行解得時候,會遇到相同路徑重複輸出的bug。我看了網上問其他部落格的 發現也有這個bug,功夫不負有心人,花了1小時之久終於發現了bug!bug如下圖 上的路徑1,2重複了,路徑4,5重複了,除去重複路徑,真實的路徑只有4條。接下來展示排錯前的 也是出...

用棧解決迷宮問題(輸出所有路徑和最短路徑)

include includeusing namespace std define m 4 行數 define n 4 列數 define maxsize 100 棧最多元素個數 int mg m 2 n 2 struct migong stack maxsize path maxsize 定義棧和...