按照《資料結構、演算法與應用c++語言描述》第九章棧的思路來實現解法。
迷宮內部主要有四個函式。welcome函式是歡迎介面,inputmaze函式是輸入迷宮,findpath函式是尋找迷宮解法,outputpath函式是輸出迷宮解法。
#include
#include
"maze.h"
using
namespace std;
intmain()
記錄當前位置的類position.h
#ifndef position_h
#define position_h
#include
using
namespace std;
class
position
position
(int r,
int c)
~position()
int row;
int col;};
#endif
// !position_h
迷宮類maze.h
#ifndef maze_h
#define maze_h
#include
#include
#include
"position.h"
using
namespace std;
class
maze
;#endif
// !maze_h
迷宮類的實現
#include
"maze.h"
maze::
maze()
maze::
~maze()
delete
maze;
maze =
null;}
if(path !=
null)}
void maze::
welcome()
void maze::
inputmaze()
for(
int i =
0; i < n +2;
++i)
cout <<
"請輸入迷宮內容:\n"
;//輸入迷宮內容,0代表可通,1代表不通
for(
int i =
1; i < m +1;
++i)}}
void maze::
findpath()
,,,}
;//右,下,左,上
path =
new stack
;// 儲存路徑資訊
position here(1
,1);
//起始位置
maze[1]
[1]=
1;//防止回到入口
int option =0;
//可選的方向,右、下、左、上=(0,1,2,3)
int max_option =3;
//方向的選擇範圍
while
(here.row != m || here.col != n)
//沒走到迷宮出口
++option;
//尋找下乙個方向}if
(option <= max_option)
//可以接著走通的情況
else
//當走不通時,可以把當前位置置1封死路,返回上一位置
else}}
path-
>
push
(here)
;//出口位置入棧
cout <<
"i find the path for this maze!"
<< endl;
return;}
void maze::
outputpath()
char
** mazepath =
newchar
*[m]
;//拷貝迷宮到mazepath
for(
int i =
0; i < m;
++i)
else
if(maze[i +1]
[j +1]
==1)}
}//拷貝走出迷宮的路線到mazepath
position tmp;
while
(!path-
>
empty()
)//列印輸出迷宮路線
for(
int i =
0; i < m;
++i)
cout << endl;
delete
mazepath[i]
;//刪除指標空間
}delete
mazepath;
//刪除指標空間
}
內部實現演算法注釋已經寫得很清楚了,注意最後輸出的迷宮演算法將查詢路線過程也一併顯示了,查詢過程走錯的路線都置為1了。
測試1:
請輸入迷宮的長和寬:55
請輸入迷宮內容:01
1000
0110
1001
1100
1011000
測試結果:
測試2:
請輸入迷宮的長和寬:98
請輸入迷宮內容:00
1000
1000
1000
1000
0011
0101
1100
1000
0100
0001
0001
0101
1110
0111
0001
0111
0000
00
測試結果:
資料演算法 資料結構與演算法
資料結構和演算法的意義?資料結構是資料的組織方式,演算法是對資料的處理方式,合理的資料結構和演算法,能夠保證程式高效的執行。演算法的五大特性 輸入 演算法具有0個或多個輸入 輸出 演算法具有1個或多個輸出 確定性 演算法每一步有確定的含義,不能有二義性 可行性 演算法有限次完成 演算法的評價方式?演...
資料結構與演算法 資料結構C 堆
資料結構c 堆 如果有乙個關鍵碼的集合k 把它的所有元素按完全二叉樹的順序儲存方式儲存在乙個一維陣列中,並滿足 ki k2 i 1 且 ki k2 i 2 ki k2 i 1 且 ki k2 i 2 i 0,1,2 則稱為小堆 或大堆 小堆 大堆 中 任一結點的關鍵碼均小於 大於 等於它的左右孩子的...
演算法(資料結構)
空間不夠儲存 給40億個不重複的unsigned int的整數,沒排過序的,然後再給乙個數,如何快速判斷這個數是否在那40億個數當中 40億個數空間儲存的問題 利用對映 分析 unsigned 範圍是2 32 40億大約大約4g個數不到,常規方法肯定是不行的 我們你可以利用 伴隨陣列 那種思想利用記...