棧 求解迷宮問題

2021-09-13 00:18:48 字數 2402 閱讀 5422

問題:

在迷宮中尋找一條路徑

演算法分析:

將迷宮數值化,使用二維陣列來表示迷宮,牆單元用0,通道單元用1;

如果能夠通過繼續前進,如果不能通過則退回到上乙個單元,因此用棧來儲存通過的路徑;

用0,1,2,3來分別表示4個方向

**:

#include "pch.h"

#include #include#include #include using namespace std;

typedef struct

postype ;

typedef struct

datatype;

#define maxlength 40 //定義迷宮的最大行列數

typedef int mazetype[maxlength][maxlength];//定義迷宮mazetype 為int型別

mazetype m;

int x, y;//迷宮的行,列

postype begin,end;//迷宮的出口和入口座標

int curstep = 1; //當前足跡,初值為1

void print()

/*輸出迷宮的解(m陣列)*/

printf("\n"); }}

void init(int k)

/*set the layout of the maze(wall = 0, 通道值為k*/

//定義周邊值行

for (j = 0; j < y; j++)

//定義除外牆外,其餘都是通道,初值為k

for (i = 1; i < x - 1; i++)

for (j = 1; j < y - 1; j++)

m[i][j] = k;

printf("請輸入迷宮內牆單元數目:");

scanf_s("%d", &j);

printf("請依次輸入迷宮內牆每個單元的行數,列數:\n");

for (i = 1; i <= j; i++)

cout << "迷宮的結構如下:"}void pushstack(seqstack *s, datatype a)

int stackempty(seqstack s)

int popstack(seqstack *s, datatype *e)

else

return 0;

}int mazepath(postype start, postype end)

/*若迷宮存在從入口start到出口end的通道,則求得一條存放在棧中,並返回1*/

nextpos(&curpos, e.di);

}

else//當前位置不能通過,退回上乙個位置

if (e.di < 3)}}

} while (!stackempty(s));

return 0; }

int main()

else

return 0;

}void init(int k)

/*set the layout of the maze(wall = 0, 通道值為k*/

//定義周邊值行

for (j = 0; j < y; j++)

//定義除外牆外,其餘都是通道,初值為k

for (i = 1; i < x - 1; i++)

for (j = 1; j < y - 1; j++)

m[i][j] = k;

printf("請輸入迷宮內牆單元數目:");

scanf_s("%d", &j);

printf("請依次輸入迷宮內牆每個單元的行數,列數:\n");

for (i = 1; i <= j; i++)

cout << "迷宮的結構如下:"}void pushstack(seqstack *s, datatype a)

int stackempty(seqstack s)

int popstack(seqstack *s, datatype *e)

else

return 0;

}int mazepath(postype start, postype end)

/*若迷宮存在從入口start到出口end的通道,則求得一條存放在棧中,並返回1*/

nextpos(&curpos, e.di);

}

else//當前位置不能通過,退回上乙個位置

if (e.di < 3)}}

} while (!stackempty(s));

return 0; }

int main()

else

return 0;

}

棧求解迷宮問題

問題 假設下圖1是某迷宮的地圖 0代表路徑,1代表牆壁 問此迷宮是否有條通路?求解思想 用棧來實現解決問題,主要步驟是 1 將迷宮的入口座標設為當前座標 2 將當前座標壓棧,將當前座標上的值設為2 0變為2 代表已走過的路 3 判斷當前座標的四周 上下左右 是否是可以通 為0則通 的,如果是通的,那...

棧實現迷宮求解問題

總體感觸是 不要著急,一步一步來,問題很容易解決的。首先是要實現乙個迷宮的地圖。明確如何儲存地圖,用vector實現二維陣列,每個元素代表地圖的乙個格仔。需要儲存哪些資訊。一張地圖的某乙個方格需要標示 能否通過,是否走過了。94 struct point 位置資訊可用postype儲存。就是 str...

利用棧求解迷宮問題

利用棧求解迷宮問題 源 include include define m 8 define n 8 define maxsize m n typedef struct box typedef struct sttype int mg m 2 n 2 bool mgpath int xi,int yi...