//--------------------檔名:maze.cpp-------------------------
//-------------by leon on nov 17th,2006----------------
//說明:本程式以迷宮問題進行演示,了解棧和鍊錶的資料結構.
//執行過程:(由於未詳細設計演算法,故地圖較簡單),
// 演示找到出口路徑的過程.
//主要演算法思想:
// 1.初始化迷宮,構造輔助執行棧和結果鍊錶
// 2.從入口開始
// do
// // else
//
// }
// else
//
// if (當前位置還有下一有效位置時)
//
// }
// }while(棧不為空時);
// 未找到出口
// 3.生成新地圖
// 4.顯示地圖
//本程式在magic linux與g++3.4 下編譯執行成功
#include
#include
#include
#include
using namespace std;
typedef unsigned int direction;
const unsigned int mazewidth = 10; //define a maze that in the size of 8*8
const unsigned int mazeheight = 10;
//class mazesymbol_t
//迷宮型別:每個迷宮格都有三種可能值:*為可通過路徑 #為牆壁 @四周均不通
//class mazesymbol_t
mazesymbol_t(char sibo)
//operations
char getsymbol()
void setsymbol(char sibo)}};
//struct mazetype
//迷宮陣列結構:二維陣列矩陣表示 高寬由mazeheight和mazewidth決定
//typedef structmazetype;
//class mazepos
//迷宮格座標值
class mazepos
mazepos(int m_x,int m_y):maze_x(m_x),maze_y(m_y) {}
mazepos(const mazepos &mp) //copy constructor
//operations
bool operator==(const mazepos &mp)
mazepos &operator=(const mazepos &mp)
};//mazepos entrance(x,y);
//迷宮入口座標值:其值規定迷宮起始座標
//mazepos entrance(1,1);
//class selemtype
//棧型別:為了保證在任何位置上都能沿原路返回
// 需要乙個後進先出的結構來儲存從入口到當前位置的路徑
class selemtype
selemtype &setval(int step,mazepos pos,direction d)
bool operator==(const selemtype set)
selemtype &operator=(const selemtype set)
};//class maze
//迷宮:封裝對迷宮矩陣的相關操作
class maze
;maze::maze() //初使化迷宮
for(j = 1;j != 9;j++)
maze.mazearr[1][3].setsymbol('#');maze.mazearr[1][7].setsymbol('#');
maze.mazearr[2][3].setsymbol('#');maze.mazearr[2][7].setsymbol('#');
maze.mazearr[3][5].setsymbol('#');maze.mazearr[3][6].setsymbol('#');
maze.mazearr[3][8].setsymbol('#');
maze.mazearr[4][2].setsymbol('#');maze.mazearr[4][3].setsymbol('#');
maze.mazearr[4][4].setsymbol('#');maze.mazearr[4][7].setsymbol('#');
maze.mazearr[5][4].setsymbol('#');
maze.mazearr[6][2].setsymbol('#');maze.mazearr[6][6].setsymbol('#');
maze.mazearr[6][8].setsymbol('#');
maze.mazearr[7][2].setsymbol('#');maze.mazearr[7][3].setsymbol('#');
maze.mazearr[7][4].setsymbol('#');maze.mazearr[7][5].setsymbol('#');
maze.mazearr[7][8].setsymbol('#');
maze.mazearr[8][1].setsymbol('#');maze.mazearr[8][2].setsymbol('#');
maze.mazearr[8][6].setsymbol('#');maze.mazearr[8][8].setsymbol('#');
}bool maze::findmazepath(mazepos start,mazepos end)
//else
}//if
else//while
if(elem.di < 4)//if
}//if
}//else
}while(!mstack.empty() && !found);
//將可走通的路徑裝入列表
while(!mstack.empty())
return found;
}//findmazepath
void maze::footprint(mazepos curpos)
void maze::markprint(mazepos curpos)
bool maze::pass(mazepos curpos)
void maze::displaymaze()
利用棧編寫迷宮程式
include define mazerownum 10 迷宮行數 define mazecolnum 10 迷宮列數 define maxsize 100 棧大小 迷宮中的座標位置 typedef structpostype 棧的元素型別 typedef structselemtype stati...
棧的應用 DFS解迷宮問題
深度優先搜尋dfs求解迷宮問題 找到迷宮的可行路徑的座標,這是乙個搜尋遍歷問題。實現思路 可行的路徑儲存在路徑向量p中,從當前點尋找可行方向,如果可行則next入棧,不行則出棧退回前一點。搜尋可行路徑的 while p.empty 下乙個點 p.back direction if maze next...
棧實現迷宮的較完善 程式
include includeusing namespace std define true 1 define false 0 define ok 1 define error 0 define overflow 2 typedef int status define init size 100 儲...