栈的应用之迷宫问题
来源:互联网 发布:算法引论 pdf百度云 编辑:程序博客网 时间:2024/04/29 19:34
走迷宫的规则:
当前坐标是(i, j)下一步可以往四个方向行走,上下左右。在迷宫数组 0标识可以走,1标识不能走 2 标记已经走过 3标识回退的路
穷举法走出迷宫有两种方法:
方法一:用栈模拟
具体思路:
代码如下:
struct Pos{int _row;int _col;};void GetMaze(int* a, int n){assert(a);FILE* fout = fopen("MazeMap.txt", "r");assert(fout);for (int i = 0; i < n; ++i){for (int j = 0; j < n; ){char ch = fgetc(fout);if (ch == '1' || ch == '0'){a[i*n + j] = ch - '0';++j;}}}}void PrintMaze(int* a, int n){for (int i = 0; i < n; ++i){for (int j = 0; j < n; ++j){cout << a[i*n + j]<<" ";}cout << endl;}cout << endl;}bool CheckIsAccess(int* a, int n, const Pos& next){int row = next._row;int col = next._col;if (row >= 0 && row < n&&col >= 0 && col < n&&a[row*n + col] == 0){return true;}else{return false;}}bool SearchMazeSize(int* a, int n, Pos entry, stack<Pos>& paths){assert(a);//Pos cur = entry;paths.push(entry);while (!paths.empty()){Pos cur = paths.top();a[cur._row*n + cur._col] = 2;if (cur._row == n - 1){return true;}Pos next = cur;//上next._row--;if (CheckIsAccess(a, n, next)){paths.push(next);continue;}//下next = cur;next._row++;if (CheckIsAccess(a, n, next)){paths.push(next);continue;}//左next = cur;next._col--;if (CheckIsAccess(a, n, next)){paths.push(next);continue;}//右next = cur;next._col++;if (CheckIsAccess(a, n, next)){paths.push(next);continue;}a[cur._row*n + cur._col] = 3;paths.pop();}return false;}
测试用例:
void Test1(){int a[N][N] = { 0 };GetMaze((int*)a, N);cout << "迷宫:" << endl;PrintMaze((int*)a, N);stack<Pos> paths;Pos entry = { 2,0 };//入口坐标cout << "是否有通路?" << SearchMazeSize((int*)a, N, entry, paths) << endl;cout << endl;PrintMaze((int*)a, N);}运行结果:
0 0
- 栈的应用之迷宫问题
- 栈的应用之迷宫问题
- 迷宫问题(栈的应用)
- 栈的应用--迷宫问题
- 栈的应用之迷宫
- 栈的应用之迷宫
- 数据结构之栈的应用(迷宫问题)
- 数据结构之 栈应用---老鼠迷宫问题
- 迷宫问题(栈的应用,二维数组表示迷宫)
- 【栈应用】迷宫问题
- 栈应用----迷宫问题
- <数据结构>栈的应用三:迷宫问题
- 栈的应用——迷宫问题
- 栈的应用-迷宫问题-数据结构
- 迷宫问题——栈的应用
- 栈的应用——迷宫问题
- 栈的应用Ⅱ--迷宫问题
- 栈和队列的应用:迷宫问题
- 关于文件I/o的原子操作
- 关于Xcode修改Templates(模版)详解
- [单调栈] BZOJ 1113 [Poi2008]海报PLA & BZOJ 1628 [Usaco2007 Demo]City skyline
- DAY3
- Android系统系统升级过程分析之------update.zip包的制作
- 栈的应用之迷宫问题
- 如何安装CRX格式?Chrome插件离线安装,CRX格式安装方法 JSON-handle Chrome插件下载
- 关于rpcsvc/rquota.h: No such file or directory问题
- 推送流程
- 博弈论 题
- Github上的README.md文件这么有意思--Markdown语言详解
- C++反射机制
- 浮点变量值的比较问题
- App免费推广途径概要