Linux資料結構 迷宮(多條出口且不帶環)

2021-08-19 14:09:17 字數 1425 閱讀 9004

之前有說過一條簡單的迷宮之路求解(只有一條出路且不帶環)

這一篇講的是如何處理多條出路的情況。

主要思路:借用兩個棧,乙個儲存當前出路的路徑點,乙個儲存最短的出路的路徑點。每找到一條出路則對比最短出路,哪一條路短,則存到最短路徑棧中。

首先我們先初始化乙個棧:

void mazeinitshortpath(maze* maze)

, ,,,

,};size_t i = 0;

for(; i < max_row; ++i)

return;

}

輔助函式:將當前路徑賦值到最短路徑棧中

void seqstackassgin(seqstack* from, seqstack* to)

}

1.定義兩個棧,cur_path,short_path分別儲存當前路徑點和最短路徑點。

2.初始化兩個棧。

3.通過輔助函式_getshortpath(maze, entry, entry, &cur_path, &short_path);遞迴來找出路。

3.1 指標合法性判斷

3.2 判斷這個點是否能走,能走則標記為2

3.3 將這個點入當前棧

3.4 判斷這個點是不是出口點

3.4(a)是出口點,則判斷是否為最短路徑(是最短路徑,則將其賦值到最短路徑棧中;不是最短路徑,則出棧返回本次遞迴,返回到它的上乙個點繼續進行四個方向的判斷)

3.4(b)不是出口點,則進行四個方向的判斷。

3.5 四個方向都判斷完了之後,則出棧,回溯到上乙個點。

void _getshortpath(maze* maze,point cur,point entry, seqstack* cur_path, seqstack* short_path)

seqstackpopback(cur_path);

return;

}else

seqstackpopback(cur_path);

}#ifdef for_maze

#includevoid seqstackdebugprint(seqstack* stack, const char* msg)

#endif

void getshortpath(maze* maze ,point entry)

測試**如下:

void testmaze3()

; getshortpath(&maze,entry);

mazeprint(&maze);

}

測試結果如下:

Linux資料結構 迷宮(多條出路且帶環)

左邊是原始迷宮圖,右邊將其所有路徑進行了標記,發現有3個出口,並且中間帶環。這就是乙個多條出路且帶環的迷宮圖。如何找到它的最短路徑呢?首先對這個迷宮初始化 void mazeinitshortpathwithcycle maze maze size t i 0 for i max row i ret...

資料結構 求多出口迷宮的最短路徑

上面我們已經寫過遞迴和非遞迴來實現求解迷宮的問題,今天我們就在遞迴的基礎上實現多條通路,最短問題。初始化最短路徑地圖 多通路最短路徑 void mazeinitshortpath maze maze int i 0 for iint j 0 for jmap i j map i j 用這個特殊的函式...

資料結構 迷宮

迷宮問題.cpp 定義控制台應用程式的入口點。include stdafx.h define m 4 define n 4 define maxsize 100 int mg m 2 n 2 struct stack maxsize path maxsize 定義棧和最短路徑的陣列 初始化 int ...