《資料結構》 棧的應用 迷宮求解問題

2021-07-25 03:22:45 字數 1458 閱讀 7764

/*  利用棧求解迷宮問題(只輸出乙個解,演算法3.3) */

typedef struct /* 迷宮座標位置型別 */

postype;

#define maxlength 25 /* 設迷宮的最大行列為25 */

typedef int mazetype[maxlength][maxlength]; /* 迷宮陣列[行][列] */

/* 全域性變數 */

mazetype m; /* 迷宮陣列 */

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

typedef struct /* 棧的元素型別 */

selemtype;

#include"c1.h"

#include"c3-1.h" /* 採用順序棧儲存結構 */

#include"bo3-1.c" /* 採用順序棧的基本操作函式 */

/* 定義牆元素值為0,可通過路徑為1,不能通過路徑為-1,通過路徑為足跡 */

status pass(postype b)

void footprint(postype a)

postype nextpos(postype c,int di)

,,,}; /* */

/* 移動方向,依次為東南西北 */

c.x+=direc[di].x;

c.y+=direc[di].y;

return c;

} void markprint(postype b)

status mazepath(postype start,postype end) /* 演算法3.3 */

else

if(e.di<3) /* 沒到最後乙個方向(北) */}}

}while(!stackempty(s));

return false;

} void print(int x,int y) }

void main()

for(j=1;jfor(i=1;ifor(j=1;jm[i][j]=1; /* 定義通道初值為1 */

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

scanf("%d",&j);

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

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

printf("迷宮結構如下:\n");

print(x,y);

printf("請輸入起點的行數,列數:");

scanf("%d,%d",&begin.x,&begin.y);

printf("請輸入終點的行數,列數:");

scanf("%d,%d",&end.x,&end.y);

if(mazepath(begin,end)) /* 求得一條通路 */

else

printf("此迷宮沒有從入口到出口的路徑\n");

}

資料結構之棧的應用 迷宮求解

程式設計思想 1 迷宮地圖相關 利用動態二維陣列來初步勾勒出迷宮 建議先用malloc申請一維陣列,再用calloc申請每個元素中的一維陣列,因為我用的是1來表示迷宮的通路,0表示死路,calloc申請完後就會自動初始化為0 迷宮交岔路結點 我們要有乙個掃瞄通路的函式,對乙個座標進行東南西北的掃瞄,...

資料結構 2 用棧實現迷宮問題的求解

反思總結 最近看到一句區別棧和佇列很形象的話 棧是先進後出,佇列是先進先出 所以吃多了吐就是棧,吃多了拉就是佇列 如上面的迷宮,用棧實現求迷宮路徑的程式,所求路徑不需要是最短路徑,但必須是簡單路徑,即在求得的路徑上不能重複出現同一通道塊。比如當走到 1,8 時,發現無路可走了,則依次退棧,退到能走通...

資料結構 迷宮求解

定義迷宮 include seqstack.h define max row 6 最大行數 define max col 6 最大列數 typedef struct mazemaze void mazeinit maze maze size t i 0 for imap i j map i j vo...