- 创建栈 。
这里使用 STL提供的stack容器 。别忘记包含<stack>头文件 。//全局声明stack<Position> myStack;
- 核心搜索算法 。
int main(int argc, char** argv) { //起点位置 Position startPos(1,1); //终点位置 Position endPos(8,8); //保存走过的位置 vector<Position> paths; //向栈中压入起始位置 mazeStack.push(startPos); //设置起始位置为已经访问过 maze[startPos.x][startPos.y]=-1; //临时存储栈顶位置 Position tmp; while(!mazeStack.empty()) {//取出栈顶位置tmp=mazeStack.top();//删除栈顶数据mazeStack.pop(); //当前搜索位置存储在 vector 中paths.push_back(tmp);//判断是否已经到了终点if (tmp.equals(endPos)) {//到达终点,结束break;} else {for(int i=0; i<4; i++) {//查找当前位置 4 个方向有无可通行位置,并压入栈中Position nextPos(tmp.x+dirs[i].xOffset,tmp.y+dirs[i].yOffset);if(maze[nextPos.x][nextPos.y]==0) {mazeStack.push(nextPos); //标识为已经被压入,避免重复压入maze[nextPos.x][nextPos.y]=-1;}}} } //显示搜索路径 for(int i=0;i<paths.size();i++){tmp=paths[i];tmp.desc(); } return 0;}执行结果:
文章插图
在演示图中标注出搜索路径,可验证搜索到的路径是可行的 。
文章插图
6. 总结本文编码实现了顺序栈和链式栈,简要介绍了STL中的stack容品,并使用它解决了典型的迷宫问题 。
【C++栈和典型迷宫问题】
经验总结扩展阅读
- 免疫力失衡怎么调理
- 湿法和干法的区别
- 概率和概率单位的区别是什么啊
- vivoX70pro和苹果11区别对比_哪款更值得入手
- 小米10s和小米10拍照哪个好_小米10s和小米10拍照对比
- 射手座的缺点和优点
- vivox70pro+和小米11Ultra那个好_详细对比
- 醇和浓硫酸共热是什么反应
- 表柔比星和多柔比星的区别
- 蒸饺怎么和面好窍门