/* 利用棧求解迷宮問題(只輸出乙個解,演算法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...