利用棧編寫迷宮程式

2021-10-25 06:51:37 字數 1741 閱讀 9332

#include

#define mazerownum 10//迷宮行數

#define mazecolnum 10//迷宮列數

#define maxsize 100//棧大小

//迷宮中的座標位置

typedef structpostype;

//棧的元素型別

typedef structselemtype;

static char maze[mazerownum][mazerownum] = ,,,

,,,,

,,};postype start = ;//設定迷宮起點

postype end = ;//設定迷宮終點

void footprint(postype curpos)

//曾走過的通道塊但是無法到達出口,是「不通的」路,標記以免陷入「死胡同」

void markprint(postype curpos)

postype nextpos(postype curpos, int direction)

return curpos;

}//判斷當前位置是否可通,即為』 『,而不是』#』、』*』(已走過)、』@』(已走過但不通)

int pass(postype curpos)

typedef struct sqstack

sqstack;

void initstack(sqstack *s)

//判棧空

int isempty(sqstack s)else

}//判棧滿

int isfull(sqstack s)

else

}//入棧

void push(sqstack *s, selemtype e)

else

printf(「此棧已滿,入棧操作失敗\n」);

}//出棧

void pop(sqstack *s, selemtype *e)

else

printf(「此棧為空棧,出棧操作失敗\n」);

}/若迷宮中存在從入口start到出口end的通道,則求得一條路徑

存放在棧中

(從棧底到棧頂),並返回true,否則返回false/

int mazepath(postype start, postype end)

;selemtype e;

e.seat = curpos;

e.direction = 1;

push(&s, e); //加入路徑

if(curpos.x == end.x && curpos.y == end.y) //到達出口

return 1;

curpos = nextpos(curpos, 1);//下一位置是當前位置的東邊

//curstep++; //探索下一步

}else

//彈出的棧頂位置尚有其他方向的方塊未探索,則切換到下乙個方向的方塊為當前位置

if(e.direction < 4)

}//end else

}while(!isempty(s));//棧不為空則迴圈繼續

return 1;

}//列印迷宮

void printmaze()

else

printf(「不存在通路!\n」);

}成果展示:

C 編寫的棧解迷宮程式

檔名 maze.cpp by leon on nov 17th,2006 說明 本程式以迷宮問題進行演示,了解棧和鍊錶的資料結構.執行過程 由於未詳細設計演算法,故地圖較簡單 演示找到出口路徑的過程.主要演算法思想 1.初始化迷宮,構造輔助執行棧和結果鍊錶 2.從入口開始 do else else ...

利用棧求解迷宮問題

利用棧求解迷宮問題 源 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...

利用棧解決迷宮問題

迷宮問題 如圖所示 從左上角出發,然後從下面出來。利用檔案讀寫的方式,讀取迷宮,然後利用棧,進行搜尋是否能夠找到出口,上下左右四個方向進行判斷,如果找不到,就回溯。pragma once pragma once include include define n 10 struct position ...