用OOP實現迷宮路徑的查詢

2021-09-11 14:29:52 字數 3214 閱讀 3524

問題要求:

請輸入迷宮的行列數: 5 5

請輸入迷宮路徑節點資訊(1表示不能走,0表示能走)

0 0 1 0 1

0 0 1 0 0

1 0 0 1 0

0 1 0 0 0

開始尋找迷宮路徑(從左上角到右下角的乙個可通行的路徑):

迷宮不存在可通行的路徑

const

int way_cnt =4;

// 總的方向數目

const

int way_right =0;

const

int way_down =1;

const

int way_left =2;

const

int way_up =

3;const

int way_state_ok =5;

// 路徑方向可以行走

const

int way_state_err =6;

// 路徑方向不能行走

class

mazenode

// 迷宮節點型別

void

setx

(int x)

void

sety

(int y)

void

setwaystate

(int way,

int val)

//設定方向的狀態

intgetval()

intgetx()

intgety()

int*

getstate()

private

:int _val;

int _x;

int _y;

int _state[way_cnt];}

;

class

cseqtack

// 棧型別

bool isfull()

void

push

(const mazenode &data)

delete [

]_stack;

_stack=ptmp;

_size*=2;

} _stack[_top++

]=data;

} bool isempty()

mazenode top()

void

pop(

)--_top;

}~cseqtack (

)private

: mazenode *_stack;

int _top;

int _size;

cseqtack (

const cseqtack&);

};

class

maze

// 迷宮型別}~

maze()

void

initmazenode

(int x,

int y,

int data)

//初始化結點

}void

adjustmazenode()

//調整路徑

if(i ==0)

if(j ==0)

if(i ==_row -1)

if(j == _col -1)

if( j < _col -

1&&_pmazes[i]

[j +1]

.getval()

==1)if

(i < _row -

1&& _pmazes[i +1]

[j].

getval()

==1)if

(j >

0&& _pmazes[i]

[j -1]

.getval()

==1)if

(i >

0&&_pmazes[i -1]

[j].

getval()

==1)}

}}void

findmazepath()

//找路

_stack.push (_pmazes[0]

[0])

;while

(!_stack.isempty ())

if(node.getstate (

)[way_right ]

==way_state_ok )

//看右邊是否可走

if(node.

getstate()

[way_down ]

==way_state_ok )

//看下邊是否可走

if(node.getstate (

)[way_up ]

==way_state_ok )

//看上邊是否可走

if(node.

getstate()

[way_left ]

==way_state_ok )

//看左邊是否可走

_stack.pop ();

}}void

showmazepath()

while

(!_stack.

isempty()

) cout << endl;

for(

int i =

0; i < _row;

++i)

else

} cout << endl;}}

private

:int _row;

int _col;

mazenode *

*_pmazes;

cseqtack _stack;

};

int

main()

cout<

} maze.

adjustmazenode()

;// 調整迷宮節點方向的行走狀態

maze.

findmazepath()

;// 開始尋找迷宮路徑

maze.

showmazepath()

;// 列印迷宮尋找的結果

迷宮路徑演算法實現

include include include include define stack init size 1000 define stackincrement 10 define ok 1 define overflow 0 define error 0 typedef int selemtyp...

用棧實現走迷宮

假設迷宮從出發點到終點最多只有一條通路。include 2016 4 14 15 11 define max 100 struct path using std cin using std cout using std endl void findnext path s,int i,int j,in...

用棧實現迷宮s

迷宮問題是經典的一類問題,如何從給出的入口找到對應的出口,實現的方法和馬踏棋盤問題相似也是通過找到周圍 8個方向座標的關係,然後依據深度優先搜尋方法和一定的條件找到下一步對應的出路。由於迷宮問題需要儲存具體的完成路徑,這與前面的問題存在一定的差別。採用棧能夠很好的解決這個問題,其中棧結構用來儲存具體...