學習了資料結構第二章棧後,實驗作業是解決簡單的迷宮問題。假設迷宮只有乙個入口和出口,預設其大小是10x10。
const
int n =10;
//迷宮大小是10x10
const
int maxsize =
100;
//陣列長度上限,因為預設迷宮大小是10x10,所以路徑最多有100個
class
position
;class
stack
;
#include
using std::cout;
using std::endl;
#include
"stack.h"
position::
position()
position::
position
(int x,
int y)
void position::
setpos
(int x,
int y)
int position::
getx()
int position::
gety()
void position::
print()
position position::
left()
position position::
right()
position position::up(
)position position::
down()
bool position::
overstep
(bool map[
][n]
)bool position::
is_obstacle
(bool map[
][n]
)stack::
stack()
bool stack::
isempty()
void stack::
push
(position c)
position stack::
pop(
)position stack::
gettop()
測試**因為嫌麻煩沒有處理異常- -!
利用深度優先搜尋解決簡單的迷宮問題,其核心函式定義在下面。
/*
迷宮問題,入口和出口唯一,每次有四個方向移動,規定迷宮大小為10x10
*/#include
using std::cout;
using std::cin;
using std::endl;
#include
"stack.h"
bool map[n]
[n];
//用bool型二維陣列表示10x10的地圖
bool book[n]
[n];
//標記每個座標是否走過,0表示沒走過,1表示走過
position des;
//儲存終點座標
stack path;
//儲存路徑的棧
void
next
(position now)
;bool
arrived()
;int
main()
} cout <<
"迷宮如下:"
<< endl;
cout <<
" 1 2 3 4 5 6 7 8 9 10"
<< endl;
//輸出列號
for(
int i =
0; i < n; i++
) cout << endl;
}int x, y;
cout <<
"輸入起點座標(行,列)"
<< endl;
cin >> x >> y;
position now
(x, y)
;//當前座標
cout <<
"輸入終點座標"
<< endl;
cin >> x >> y;
des.
setpos
(x, y)
;//輸入終點座標
next
(now);if
(!arrived()
)//遍歷所有可能走不到終點
cout <<
"沒有出口"
<< endl;
else
}return0;
}bool
arrived()
void
next
(position now)if(
arrived()
)return
;//若已經到達終點,則返回上一層遞迴
if(now.
is_obstacle
(map)
|| now.
overstep
(map)
) book[now.
getx()
-1][now.
gety()
-1]=
1;//設定當前座標為走過
/* 用遞迴的方式尋找每一步可以走的路徑,以右,上,下,左為順序
*/next
(now.
right()
);//先一直向右走,直到到達終點或遇到障礙或越界if(
arrived()
)return
;next
(now.up(
));//再退回來往上走,重複if(
arrived()
)return
;next
(now.
down()
);//往下走if(
arrived()
)return
;next
(now.
left()
);//往左走if(
arrived()
)return
; book[now.
getx()
-1][now.
gety()
-1]=
0;//當前座標四個方向都試過後設為未走過,供接下來的嘗試繼續使用
return
;}
簡單的迷宮問題
給你乙個n m的迷宮,這個迷宮中有以下幾個標識 s代表起點 t代表終點 x代表障礙物 代表空地 現在你們涵哥想知道能不能從起點走到終點不碰到障礙物 只能上下左右進行移動,並且不能移動到已經移動過的點 輸入第一行乙個整數t 1 t 10 接下來有t組測試資料,對於每一組測試資料,第一行輸入2個數n和m...
簡單迷宮問題
首先是深搜 又叫回溯法。include int n,m,p,q,min 999999 p,q為 終點座標,m,n為迷宮行數和列數 int a 51 51 book 51 51 void dfs int x,int y,int step return 返回上一步 int i,tx,ty,next 4 ...
迷宮問題求解(1) 簡單迷宮
標頭檔案 include include include include include maze.h define max 100 typedef struct position datatype typedef struct stack stack void stackinit stack s ...