實現簡單的迷宮

2021-07-12 02:04:22 字數 1863 閱讀 8246

我們知道棧的特點是:後進先出

first in last out);也就是說只能在棧的尾部進

行壓棧和出棧,而且出棧的時候只能從最後乙個資料開始。

所以我們利用棧這個特點,來實現這個迷宮。在這之中我們要採用「回溯」的方法去處理當遇到路徑不通的情況。

原理:每找到乙個通路,就將這個資料壓棧,這樣當前位置的上乙個位置就位於棧的頂部,假如當前位置的上下左右都找不到通路的時候,就開始回溯,也就是開始從來的路往回走,而之前走過的路都存在棧裡面,所以只需要乙個乙個的pop就能依次往回退,每退一次,就尋找上下左右有沒有通路,如果找到通路就繼續往下走,並壓棧,直到走出整個迷宮。

#define _crt_secure_no_warnings 1

#include"mazemap.h"

#includevoid test()

; cout <

#includeusing namespace std;

struct pos

;void getmaze(int* a, int n)     

else

}} fclose(fout);

}bool checkisaccess(int *a, int n, const pos& next)//檢查當前的路徑是否通行

else }

bool searchpath(int* a, int n, pos entry, stack& paths)

pos next = cur;     //先將cur賦給next  為了下面如果next改變後不滿足,                 next._row--;//上                          

if (checkisaccess(a, n, next))

next = cur;

next._col++;//右

if (checkisaccess(a, n, next))

next = cur;

next._row++;//下

if (checkisaccess(a, n, next))

next = cur;

next._col--;// 左

if (checkisaccess(a, n, next))

next = cur;

paths.pop();     //如果遇到不通(在此即四個方向都不為0)然後,讓棧中儲存

}                              的座標pop(即往回倒)重複試探四個方向 直到找到另一

return false;                   條可通路徑;

}void display(int* a, int n)    //列印

至此,乙個簡單的迷宮就完成了,以上左邊的圖就是開始的迷宮。右邊的圖是結果。最終,每次走過的地方都被標誌成2.

本文出自 「土豆_」 部落格,請務必保留此出處

迷宮的簡單實現

迷宮 使用乙個二維陣列模擬迷宮,在這裡使用棧結構和回溯的演算法簡單實現迷宮。給定乙個入口,先將入口座標入棧。再對四個方向進行判斷,是否能走,如果能走將下乙個節點入棧。當無路可走時,出棧節點,回溯到上乙個節點進行上一步判斷。當找到乙個出口時 再回溯到上乙個岔路口,尋找另外通路。如果將所有節點出棧,則說...

簡單的實現迷宮問題

在實現迷宮問題,是對棧這種結構進一步的熟悉和使用。首先,可以定義乙個10 10的二維陣列,0代表通路,1代表牆.再定義乙個座標的結構體。開始走迷宮.開始走迷宮的時候,無非就4個方向,上下左右,判斷哪個方向能走通,那就沿著那條路繼續走,走到 死路 那就返回到第一次分叉的路口,換個方向繼續走.話不多說,...

迷宮程式簡單實現

這個程式是將乙個迷宮的程式列印出來,具體的操作我會在下面的程式中具體的 給出來,其中分為兩乙個小的程式,乙個是這個檔案,另乙個是乙個以head.cpp檔案 為main函式的檔案,好了,程式開始了 include iostream.h include malloc.h define error 0 d...