迷宮旅行遊戲
專案簡介
迷宮只有兩個門,乙個門叫入口,另乙個門叫出口。乙個騎士騎馬從入口走進迷宮,迷宮中設定很多牆壁,對前進方向形成了多處障礙。騎士需要在迷宮中尋找通路以到達出口。
設計思路
在求解過程中,為了保證在到達某一點後不能向前繼續行走(無路)時,能正確返回前一點以便繼續從下乙個方向向前試探,則需要在試探過程中儲存所能夠到達的每一點的下標及從該點前進的方向,當找到出口時試探過程就結束了。
為了確保程式能夠終止,調整時,必須保證曾被放棄過的填數序列不被再次試驗,即要求按某種有序模型生成填數序列。給解的候選者設定乙個被檢驗的順序,按這個順序逐一生成候選者並檢驗。
資料結構
迷宮問題是棧應用的乙個典型例子。通過前面分析,我們知道在試探過程中為了能夠沿著原路逆序回退,就需要一種資料結構來儲存試探過程中曾走過的點的下標及從該點前進的方向,在不能繼續走下去時就要退回前一點繼續試探下乙個方向,棧底元素是入口,棧頂元素是回退的第一站,也即後走過的點先退回,先走過的點後退回,與棧的「後進選出,先進後出」特點一致,故在該問題求解的程式中可以採用棧這種資料結構。在迷宮有通路時,棧中儲存的點逆序連起來就是一條迷宮的通路,否則棧中沒有通路。
, ,, };//迷宮矩陣
for (int i = 0; i<10; i++)
for (int j = 0; j<10; j++)
mpoint startp(1, 1, true);//初始座標(入口)
mpoint endp(8, 8, true); //結束座標(出口)
mstack mpath;//定義物件
mpath.push(startp);//把初始座標入棧
mpoint mp = startp;//記錄當前座標
while (true)
if (mparray[mp.x - 1][mp.y].can_move_to)//向上
if (mparray[mp.x][mp.y + 1].can_move_to)//向右
if (mparray[mp.x][mp.y - 1].can_move_to)//向左
if (0 == mpath.getlength())//棧空
mpath.pop();
mp = mpath.gettop();
} cout << "路徑:" << endl;
mpath.printstack();//輸出路徑
return 0;
}mstack.h
#include using namespace std;
struct mpoint
mpoint *next;
};class mstack
;
mstack.cpp
#include "mstack.h"
#include using namespace std;
mstack::mstack()
int mstack::push(mpoint point)
return ++length;
}mpoint mstack::gettop()
mpoint mstack::pop()
top = top->next;
} if (length == 1)
length--;
return retpoint;
}int mstack::getlength()
void mstack::printstack()
}
資料結構 棧 c 迷宮
1,棧的基本操作和迷宮的資料結構 includeusing namespace std define stack init size 100 define stack increment size 100 typedef structposttype 座標結構 typedef struct bloc...
資料結構 迷宮和棧 C語言
include stdio.h include stdlib.h include time.h define mazesize 10 define ok 1 define error 0 define true 1 define false 0 define stack init size 100 ...
C語言資料結構 棧實現迷宮
include define max 30 typedef struct box typedef struct stack int map 10 10 int search int beginx,int beginy,int endx,int endy else return 1 find 0 wh...