簡單的迷宮問題

2021-10-04 07:42:16 字數 3226 閱讀 9432

學習了資料結構第二章棧後,實驗作業是解決簡單的迷宮問題。假設迷宮只有乙個入口和出口,預設其大小是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 ...