#include #include #include #include /***************記憶體檢測區*********************/
#define _crtdbg_map_alloc //* 這個是 相當於一種開關 開啟這個記憶體檢測的開關
#include //*
#include //*
#ifdef _debug //*
#ifndef dbg_new //*
#define dbg_new new (_normal_block, __file__, __line__)//*
#define new dbg_new //*
#endif //*
#endif
/***************巨集定義和型別轉換區*****************/
#define max_size 128
#define stack_s typedef
typedef struct point_c point;
#define elem_type point_c
#define width_x 15
#define lenth_y 10
using namespace std;
/***************結構體區*********************/
stack_s struct stack_s stack;
/************全域性變數**************/
int map[lenth_y][width_x],,,
,,,,
,,
};/***************函式定義區*********************/
bool isempty(stack& st);
bool isfull(stack& st);
// 1.初始化棧
bool initstack(stack& st);
// 2.入棧 e是要入棧的元素
bool pushstack(stack& st, elem_type e);
// 3.出棧 e是要出棧的元素
bool popstack(stack& st, elem_type& e);
// 4.銷毀棧
void destroystack(stack& st);
// 5.棧的遍歷
void printstack(stack& st);
// 6.棧的長度
int stacklen(stack& st);
/**************與迷宮相關的函式*****************/
bool isvalidstart(point& start);
// start 是入口 end 是出口
void play(point& start, point& end, stack& st);
// 判斷下乙個 步時否符合要求
bool isvalidnext(point& next);
// 判斷終點是否有效
bool isvalidend(point& end, point& start);
// 定時器 函式
void lasttime();
/***************使用者介面區*********************/
int main(void) else
point start; //迷宮的入口
start.x = 3;
start.y = 0;
point end; ///用於儲存出口的座標
// 走出迷宮的實現
play(start, end, st);
printf_s("迷宮的出口為:end, x座標為:%d, y座標為:%d \n", end.x, end.y);
// 遍歷地圖
for (int i = 0; i < lenth_y; i++)
return;
}int stacklen(stack& st)
bool isvalidstart(point& start)
else
return false;
}bool isvalidnext(point& next)
else
return false;
}bool isvalidend(point& end, point& start)
else
return false;
}void play(point& start, point& end, stack& st)
while ( !isempty(st) )
next = cur;
next.y -= 1; //向上
if (isvalidnext(next))
next = cur; //上面的next的無效的話 在重新賦值
next.x -= 1; //向左
if (isvalidnext(next))
next = cur; //上面的next的無效的話 在重新賦值
next.y += 1; //向下
if (isvalidnext(next))
next = cur; //上面的next的無效的話 在重新賦值
next.x += 1; //向右
if (isvalidnext(next))
point tmp; //用於記錄 出棧的一點
popstack(st, tmp);
} return;
}void lasttime()
迷宮求解 棧的實現
一 題目及分析 二 思路 迷宮 迷宮的檔案儲存方式 三 include include define length 10 define width 10 define start hang 1 從0行開始計算row define start lie 1 從0列開始column define end ...
迷宮求解(棧的應用)
最近遇到了乙個較難的演算法題 迷宮求解,剛把棧與佇列學完,看完題面之後感覺有點想法,卻又一頭霧水。有些問題看著簡單但執行起來很難,而有些問題看上去很難但執行起來,更難。時間限制 1 sec 記憶體限制 128 mb 描述 有乙個 10 x 10 的迷宮,起點是 s 終點是 e 牆是 道路是空格。乙個...
棧的應用舉例 迷宮求解
迷宮求解思路 求出所有的從入口到出口的路徑 do否則切換當前位置的東鄰方向為新的當前位置進行探索 否則 否則 while 棧不空 include include sqstack.h using namespace std state x y 用來表明當前 x,y 位置的狀態是否為通過,1表示通道,0...