"迷宮問題(棧)"
「棧」是一種簡單的資料結構,它的主要特點就是"先進後出",即就是先壓入棧中的資料需要最後出棧。相當於棧是乙個杯子,最先放進棧中的東西,只能夠最後拿出來。下面對「棧」的特點用圖形象的表示出來。
這次所要討論的是基於棧的迷宮問題,當給定乙個迷宮,我們怎樣能夠找出迷宮中的通道呢?如果迷宮的規模比較大,我們又該如何去實現呢?我們能夠明顯的知道需要使用乙個二維陣列用來儲存迷宮,但是當迷宮的規模比較大時,或者是當我們想要頻繁的去更改所設計的迷宮時,用二維陣列的方式顯然是不大合理,程式更改會比較麻煩。
在這裡我採用「檔案」的方式將迷宮進行儲存,程式中只用實現讀取檔案的操作,這樣很便於以後對程式的維護。因為動態的給定迷宮大小,程式的實現還是較為麻煩的,這裡直接將迷宮的規模給定。用「1」來表示不能夠通過,「0」表示能夠通過。下面是迷宮的設計:
針對迷宮的特點,主要採用的方法是先將迷宮的入口點壓入棧中,在對這個點的上、下、左、右方向的節點進行判斷,看是否有能夠通過的節點(「0」),若沒有,則迷宮中沒有一條能夠通過的路徑,如果存在,則將這個節點也壓入棧中,迴圈這種方式,直到找到沒有能夠前進的點,此時就要進行「回溯」, 即就是倒回以前走過的點。進而在判斷有沒有剛才沒有走過的且能夠通過的節點,若存在,再次進行剛才的壓棧操作,直到走出迷宮,若回到迷宮的入口點,則迷宮中不存在通路。
根據上面的思路,編寫出下面的**:
檔案
#pragma once
#define max 10
#include #include //使用靜態陣列
struct pos //標記點的位置座標
;void getmaze(int * arr, int n) //從檔案中獲取迷宮}}
fclose(open);
}void print(int * arr, int n) //列印迷宮
cout <
}}bool checkisaccess(int * arr, int n, const pos& next) //檢查迷宮節點的下乙個路徑上的節點
return false;
}//entry 為入口的位置,paths用來儲存迷宮的通路
//判斷迷宮中是否存在一條通路
bool searchmazepaths(int * arr, int n, pos entry, stack& paths)
pos next = cur;
//上next._row--;
if (checkisaccess(arr, n, next))
//下next = cur;
next._row++;
if (checkisaccess(arr, n, next))
//左next = cur;
next._col--;
if (checkisaccess(arr, n, next))
//右next = cur;
next._col++;
if (checkisaccess(arr, n, next))
paths.pop(); //若節點的剩餘方向都不能通過,則進行回溯。}}
檔案
#define _crt_secure_no_warnings 1
//使用棧來設計迷宮問題
#include using namespace std;
#include #include "memory.h"
int main()
; stackpaths;
pos tmp;
tmp._row = 2;
tmp._col = 0;
getmaze((int*)arr, max);
print((int*)arr, max);
cout <
int ret = searchmazepaths((int *)arr, max, tmp, paths);
printf("能否有一條通路:%d\n\n\n", ret);
print((int*)arr, max);
system("pause");
return 0;
}
棧求解迷宮問題
問題 假設下圖1是某迷宮的地圖 0代表路徑,1代表牆壁 問此迷宮是否有條通路?求解思想 用棧來實現解決問題,主要步驟是 1 將迷宮的入口座標設為當前座標 2 將當前座標壓棧,將當前座標上的值設為2 0變為2 代表已走過的路 3 判斷當前座標的四周 上下左右 是否是可以通 為0則通 的,如果是通的,那...
棧 求解迷宮問題
問題 在迷宮中尋找一條路徑 演算法分析 將迷宮數值化,使用二維陣列來表示迷宮,牆單元用0,通道單元用1 如果能夠通過繼續前進,如果不能通過則退回到上乙個單元,因此用棧來儲存通過的路徑 用0,1,2,3來分別表示4個方向 include pch.h include include include in...
棧實現迷宮求解問題
總體感觸是 不要著急,一步一步來,問題很容易解決的。首先是要實現乙個迷宮的地圖。明確如何儲存地圖,用vector實現二維陣列,每個元素代表地圖的乙個格仔。需要儲存哪些資訊。一張地圖的某乙個方格需要標示 能否通過,是否走過了。94 struct point 位置資訊可用postype儲存。就是 str...