/* (一)初级迷宫问题: 0:代表通 1:代表不通 求迷宫的通路 (二)步骤: 1.创建迷宫 * 从文件中读取迷宫 * 开辟二维数组存放迷宫 2.寻找通路 * 检查某位置是否为通 * 出口位置判断 * 走过的路用2标记 * 利用栈回溯 (三)问题 1.解决回溯中重复探测:递归 2.最优解:迷宫的最短通路 */ #include <iostream> #include <stdlib.h> #include <assert.h> #include <stack> #define _CRT_SECURE_NO_WARNINGS 1 #define N 10 using namespace std; struct Pos { size_t _row; //行 size_t _col; //列 }; void GetMap(int* m, int n) { int i = 0; int j = 0; assert(m); FILE* fin = fopen("C:\\学习\\code\\数据结构\\MazeMap\\MazeMap.txt","r"); assert(fin); for(i = 0; i < n; i++) { for(j = 0; j < n;) { char ch = fgetc(fin); if(ch == '0'||ch == '1') { m[i*n+j] = ch - '0'; j++; } } } } void PrintMap(int* m, int n) { assert(m); int i = 0; int j = 0; for(i = 0; i < n; i++) { for(j = 0; j < n; j++) { cout<<m[i*n+j]<<' '; } cout<<endl; } } bool CheckIsAccess(int* m, int n, const Pos& next) { if(next._row >= 0 && next._row < n && next._col >= 0 && next._col < n && m[next._row*n+next._col] == 0) { return true; } else { return false; } } bool SearchMazePath(int* m, int n, Pos enrty,stack<Pos> paths) { assert(m); paths.push(enrty); while(!paths.empty()) { Pos cur = paths.top(); m[cur._row * n + cur._col] = 2; //检查是否找到出口 if(cur._row == n-1) { return true; } Pos next = cur; //上 next._row--; if(CheckIsAccess(m, n, next)) { paths.push(next); continue; } next = cur; //右 next._col++; if(CheckIsAccess(m, n, next)) { paths.push(next); continue; } next = cur; //next归位 //下 next._row++; if(CheckIsAccess(m, n, next)) { paths.push(next); continue; } next = cur; //左 next._col--; if(CheckIsAccess(m, n, next)) { paths.push(next); continue; } paths.pop(); } return false; } int main() { int map[N][N]= {0}; GetMap((int*)map, N); PrintMap((int*)map, N); Pos enrty = {2,0}; stack<Pos> paths; cout<<endl; cout<<SearchMazePath((int*)map,N,enrty,paths); cout<<endl; PrintMap((int*)map, N); system("pause"); return 0; }
初级版迷宫问题(栈的应用)
原创
©著作权归作者所有:来自51CTO博客作者hhaxy77的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:数据结构:模板实现栈和队列
下一篇:[c语言]单链表的实现
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
一场关于栈的面试----最小栈的实现
一场关于栈的面试----最小栈的实现
最小值 出栈 入栈 -
栈的应用——迷宫问题
#include#define MaxSize 100typedef struct{ int i; int j; int di;}Box;typedef struct{
栈 迷宫问题 typedef 数据结构 初始化 -
栈的应用之迷宫问题
给一个二维数组列表,表示迷宫。0表示通道,1
元组 死循环 二维数组 -
利用栈求解迷宫问题
利用栈求解迷宫问题源代码:#include#include#define M 8#define N 8#defi
#define 进栈 #include