用栈实现走迷宫
来源:互联网 发布:非暴力不合作知乎 编辑:程序博客网 时间:2024/05/22 06:45
假设迷宫从出发点到终点最多只有一条通路。
#include<iostream>//2016/4/14/15:11#define Max 100struct path{ int i, j;};using std::cin;using std::cout;using std::endl;void findnext(path *s, int &i, int &j, int t[][Max], int top);void maze(int t[][Max], int start_i, int start_j, int end_i, int end_j);intmain(){ int n, m, t[Max][Max], start_i, start_j, end_i, end_j; cout << "Please input row:\n";//用户输入迷宫行数 cin >> n; cout << "Please input column:\n";//用户输入迷宫列数 cin >> m; cout << "Please input start_i:\n";//用户输入出发点 cin >> start_i; cout << "Please input start_j:\n"; cin >> start_j; cout << "Please input end_i:\n";//用户输入终点 cin >> end_i; cout << "Please input end_j:\n"; cin >> end_j; cout << "Please input maze:\n";//用户输入迷宫 for (int i = 0;i <= n + 1;i++) { for (int j = 0;j <= m + 1;j++) { if (i == 0 || j == 0 || i == n + 1 || j == m + 1) { t[i][j] = 0; } else { cin >> t[i][j]; } } } maze(t, start_i, start_j, end_i, end_j); return 0;}voidfindnext(path *s, int &i, int &j, int t[][Max], int top)//找寻下一个可能的位置,如果找不到则令i = 0, j = 0{ //上下左右都探索一次,但如果发现探索的点是来时的点则跳过(&&后条件的意义) if (t[i - 1][j] != 0 && i - 1 != s[top - 1].i)//向上探索 { i--; } else if (t[i + 1][j] != 0 && i + 1 != s[top - 1].i)//向下探索 { i++; } else if (t[i][j - 1] != 0 && j - 1 != s[top - 1].j)//向左探索 { j--; } else if (t[i][j + 1] != 0 && j + 1 != s[top - 1].j)//向右探索 { j++; } else//未找到能走的点,以将i,j赋为0作为标志 { i = 0; j = 0; }}voidmaze(int t[][Max], int start_i, int start_j, int end_i, int end_j){ int i = start_i, j = start_j, top = 0;//top为栈顶下标 path s[Max]; s[top].i = i; s[top].j = j;//先将出发点加入栈 while (top != -1)//只要栈不空就一直循环 { if (s[top].i == end_i&&s[top].j == end_j)//如果找到终点就跳出循环 { break; } findnext(s, i, j, t, top);//通过本函数找到下一个可走的位置 if (i == 0 && j == 0)//如果没有可走的位置 { t[s[top].i][s[top].j] = 0;//将当前栈顶的点置0,这样回溯后这个点就不能再走了 top--; i = s[top].i;//令i和j都回到上一个位置 j = s[top].j; } else//找到了可走的位置,则将其加入栈 { top++; s[top].i = i; s[top].j = j; } } if (top == -1)//如果栈空,表明没有通路 { cout << "No path.\n"; } else//如果栈不空,则栈中元素即使通往终点的通路 { for (int k = 0;k <= top;k++) { cout << s[k].i << " " << s[k].j << endl;//从栈底至栈顶依次输出点,构造路径 } cout << "The length of path is " << top + 1 << endl;//输出路径的长度 }}
1 0
- 用栈实现走迷宫
- 用栈实现的自动走迷宫
- 老鼠走迷宫 (栈实现)
- C++ 利用栈实现走迷宫
- 用C语言实现走迷宫
- c++实现走迷宫
- java实现走迷宫
- DFS实现走迷宫
- 【数据结构】走迷宫实现
- 栈应用-走迷宫
- java实现走迷宫算法
- 老鼠走迷宫问题(C++栈实现)
- 【c++】利用循环和栈实现走迷宫
- 用遗传算法走迷宫 [Java语言实现]
- 走迷宫-栈的使用
- 栈应用2:走迷宫
- python 使用分水岭算法实现走迷宫
- 走迷宫回溯算法(Java实现)
- 236. Lowest Common Ancestor of a Binary Tree
- Python机器学习之Logistic回归
- 怎么将jpg转换成pdf文件
- ios socket简单使用
- ios如何添加第三方的字体库
- 用栈实现走迷宫
- 从尾到头打印单链表(C语言)
- ListView的优化
- Intent详解
- 统计利用先序遍历创建的二叉树的深度
- Number
- CentOS6.5系统光纤连接存储的多路径配置及使用方法
- git慢慢整理
- Android 6.0权限机制及开发流程详解