#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 ...