迷宮求解問題 堆疊的使用

2021-05-26 21:49:03 字數 2228 閱讀 5661

**:

queue.h

#define stack_init_size100

#define stackincrement10

#define statusbool

#define error0

#define overflow-2

#define ok1

struct postype

;typedef struct 

selemtype;

typedef struct  

sqstack;

status initstack(sqstack &s);

status destorystack(sqstack &s);

status stackempty(sqstack s);

int stacklength(sqstack s);

status gettop(sqstack s, selemtype &e);

status push(sqstack &s, selemtype e);

status pop(sqstack &s, selemtype &e);

queue.cpp

#include

#include "queue.h"

status initstack(sqstack &s)

status destorystack(sqstack &s)

selemtype e;

for( ; s.base != s.top; )

return ok;

}status stackempty(sqstack s)

return true;

}int stacklength(sqstack s)

return i;

}status gettop(sqstack s, selemtype &e)

status push(sqstack &s, selemtype e)

*s.top++ = e;

return ok;

}status pop(sqstack &s, selemtype &e)

#include

#include "queue.h"

#define  mazetype int

//迷宮陣列,0表示可以通過,1表示不能通過

int array[10][10]=,,

,,,,

,,,,

};//棧

/* postype 1=東 2=南 3=西 4=北*/

sqstack s;

postype start = ;

postype end = ;

= 1;

= 1;

= 8;

= 8;

statuspass(postype &pos);

voidfootprint(postype &pos);

postype nextpos(postype &pos, int direction);

voidmarkprint(postype &pos);

status  mazepath(mazetype maze, postype start, postype end);

voidoutput();

void main()

else

cout<

cout

bool ispass = mazepath(1, start, end);

if (ispass ) 

else

}statuspass(postype &pos)

return false;

}voidfootprint(postype &pos)

postype nextpos(postype &pos, int direction)

}voidmarkprint(postype &pos)

}status  mazepath(mazetype maze, postype start, postype end)

else

}if (e.di < 4 )

}} while (!stackempty(s));

return false;

}voidoutput()

else if ((array[x][y] !=1) && (array[x][y] !=-2))

else 

cout<

cout

}執行結果:

利用堆疊實現迷宮問題的求解

解決迷宮問題的常用演算法就是回溯法,基本思想就是 從起點出發,順著乙個方向探索,若能夠走通,則繼續往前走,若不能夠走通,則沿原路退回一步,換乙個方向繼續探索,直至找到乙個可行的通路。此時從可行通路的到達終點的前一步進行回溯,即先從終點退一步到達終點前的第乙個位置,若該位置的四個方向還沒有探索完,則換...

求解迷宮問題

求解迷宮問題 include using namespace std const int m 6 const int n 8 int maze m 2 n 2 m n大小的迷宮,0可前進,1通行受阻。並且在迷宮的周圍鑲上邊框 int mark m 2 n 2 儲存訪問標記,0未訪問,1已訪問 int...

迷宮問題求解

對於迷宮問題的求解,我們最後輸出的是迷宮的路徑,故符合佇列的先進先出特性,所以我們採用佇列的方式對迷宮進行求解 首先我們將建立乙個二維陣列 自定義初始化迷宮 7 7 int arr n n 二維陣列邊界用0填充,使之區域封閉,在實現過程 現陣列越界問題 接下來是 include include de...