C 編寫的棧解迷宮程式

2021-04-12 13:11:03 字數 3301 閱讀 8176

//--------------------檔名: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 儲...