解決迷宮問題, 棧和佇列

2021-06-06 06:51:48 字數 1169 閱讀 2442

#includeusing namespace std;

const int m = 10, n = 10;

int mg[m+1][n+1]=,

, ,, ,

, ,, ,

}; const maxsize = 200;

struct

qu[maxsize];

int front=-1,rear=-1; /*隊首指標和隊尾指標*/

//(1)首先將(1,1)入隊;

//(2)在佇列qu不為空時迴圈:出隊一次(由於不是環形佇列,該出隊元素仍在佇列中),稱該出隊的方塊為當前方塊,front為該方塊在qu中的下標。

// ①如果當前方塊是出口,則輸出路徑並結束。

// ②否則,按順時針方向找出當前方塊的四個方位中可走的相鄰方塊(對應的mg陣列值為0),將這些可走的相鄰方塊均插入到佇列qu中,其pre設定為本搜尋路徑中上一方塊在qu中的下標值,也就是當前方塊的front值,並將相鄰方塊對應的mg陣列值置為-1,以避免回過來重複搜尋。

//(3)若隊列為空仍未找到出口,即不存在路徑。

void mgpath()

return;

}int dir = 0;

while (dir < 4)

if (mg[i][j] == 0)

++dir;

}}

cout << "err"; }

int main()

const maxsize = 100;

struct

stack[maxsize]; /*定義棧*/

int top=-1; /*初始化棧指標*/

void mgpath() /*路徑為:(1,1)->(m-2,n-2)*/

} printf("\n");

return;

find=0;

while (di<4 && find==0) /*找下乙個可走方塊*/

if (mg[i][j]==0) find=1;

} if (find==1) /*找到了下乙個可走方塊*/

else /*沒有路徑可走,則退棧*/

} printf("沒有可走路徑!\n");

}

棧和佇列迷宮問題

define n 6 int maze n n 通過乙個數字來創造乙個6 6的迷宮,其中 0代表牆,1代表能夠走的路。這裡將陣列通過畫圖軟體畫出來,這裡紅色的1代表迷宮的入口,綠色的 1代表迷宮的出口。這個陣列所建立的迷宮是相對複雜的一種迷宮,首先這個迷宮是存在環的 這幾個1,如果你的迷宮函式只是用...

棧和佇列的迷宮問題

maze.h pragma once include include define n 6 static int maze n n typedef struct pos pos void mazeprint int mazegetpath pos entry,pos exit int mazeche...

棧和遞迴 解決迷宮問題

走過的路設定為2,未走過的路設定0,牆設定為1 如下 bool checkpath const pos cur bool getmazepath pos entry pos next cur 上next.row 1 if checkpath next next cur 右next.col 1 if ...