迷宮的最優路徑

2021-06-26 15:11:05 字數 1556 閱讀 9584

對於迷宮最優路徑,其中之一方法就是把所有路徑都找出來如下:

1   1    *     *   *

*    1    *     *   *

*    1    *     *   *

*    1    1    1   1

*    1    *     *   1                對於這樣的迷宮,從(0 0)到(4 4)所有路徑有(00)(01)(11)(21)(31)(41)(31)(32)(33)(34)(44)以及

(00)(01)(11)(21)(31)(32)(33)(34)(44)  這樣在一條路徑重複走同一節點,這樣浪費了空間也同時浪費了時間。

當然求解迷宮的最優路徑肯定需要重複走同一節點,但是對於每條路徑是沒有重複節點。換個方式從整體和區域性上看,整體就是所有能從起點到終點的路徑,區域性就是整體中的每一條路徑。對於整體是有重複節點,而在區域性上是沒有重複節點的。

這樣我們可以給每個點也就是(1或者*)給個value,初始都為零。這樣每走一步就加一,這樣就記錄了你走過的路徑。同時走的路徑只能朝著大數走或者是未走過的並且能走的路。這樣就即保證了在單一條路徑上沒有走重複路,同時在其他路徑可以重複走之前走過的節點。

#include "iostream"

#include "cstddef"

#include using namespace std;

struct point;

};//點的位置

int direct[4][2] = ;//四個方向

templateclass mazepath;

templatemazepath::mazepath(size_t x , size_t y , t w): width(x) , height(y) , wall(w)

}templatevoid mazepath::push_back(t data , size_t x , size_t y)

templatevoid mazepath::printmaze()

for(int i = 0; i < this->height; ++ i)

}templatebool mazepath::iscango(size_t nx , size_t ny , size_t prepoint)

templateint mazepath::optimalpath(point& start , point& end , vector& path)

for(int i = 0; i < 4; ++ i)

}return 0;

}int main()

}_maze.printmaze();

point start(0 , 0) , end(8 , 8);

vectorpath;

_maze.optimalpath(start , end , path);

_maze.printmaze();

return 0;

}

結果圖如下:

A (最優路徑)

尋路 尋找最短路徑並避開障礙物 首先將地圖虛擬化,將地圖劃分為乙個乙個的小方塊,這樣可以用二維陣列來表示地圖。如下所示,綠色塊 a 是起點,紅色塊 b 是終點,中間藍色塊是障礙物,白色塊是空地。先羅列出所有的步驟,等會按照例子一步一步分析 1 尋路步驟 步驟1.從起點a開始,把a作為乙個等待檢查的方...

在探迷宮 2 迷宮路徑之最優解 帶環或不帶環

迷宮問題 1 課程設計之簡單實現 只找出一條通路即可 因為迷宮問題需要用到棧,所以貼出棧的相關操作的鏈結 棧的基本操作 棧的相關面試題總結 迷宮地圖的分類 大概有三種 第一類 乙個入口 entry 乙個出口 exit 而且通路不帶環,只有一條通路。思路 首先,將入口座標壓入棧中,確定棧頂元素入口座標...

最優對稱路徑

湖南省第七屆大學生計算機程式設計競賽 the seventh hunan collegiate programming contest 題目g最優對稱路徑 給乙個n行n列的網格,每個格仔裡有乙個1到9的數字。你需要從左上角走到右下角,其中每一步只能往上 下 左 右四個方向之一走到相鄰格仔,不能斜著走...