迷宫问题(栈)
来源:互联网 发布:知乎周刊 epub 编辑:程序博客网 时间:2024/06/06 08:34
路径问题和最优路径
如图0为可走位置,1为不可走位置
求解思想:
用栈来实现解决问题,主要步骤是
(1)将迷宫的入口坐标设为当前坐标
(2)将当前坐标压栈,将当前坐标上的值设为-1(0变为-1),代表已走过的路
(3)判断当前坐标的四周(上下左右)是否是可以通(为0则通)的,如果是通的,那就将它的坐标设为当前坐标
(4)重复(2)(3)的操作
(5)若遇到如图1中标注的坐标,四周都不可以通(四周都不为0),那么就回退(将栈中的坐标弹出),将栈顶坐标设为当前坐标,重复步骤(3)
(6)当退回到两路的相交处则当前周围有路可以通,重复步骤(2)(3)
(7)只要判断当前位置在迷宫地图的边缘(只有边界值为0时,当前位置才可以到达边界),那么就可以判断该迷宫是否可以通
栈中的元素是迷宫通路的路线,若栈为空,则迷宫没有通路
#include<iostream>using namespace std;#define M 4 #define N 4 #define max ((M+2)*(N+2))int mg[M+2][N+2] = {1,1,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1};typedef struct{ int i,j;//当期方块的位置 int di;//方向 0-3 }box;typedef struct{ box data[max]; int top;}ST;void path(int xi,int yi,int xe,int ye){ int i,j,k,di,flag; ST st; st.top = -1;// 初始位置进栈 st.top++; st.data[st.top].i = xi; st.data[st.top].j = yi; st.data[st.top].di = -1;//方向不定化 mg[xi][yi] = -1; while(st.top > -1) { //取 栈顶 元素 i = st.data[st.top].i; j = st.data[st.top].j; di = st.data[st.top].di; flag = 0; while(di < 4&& flag ==0) { di++; switch(di) { case 0:i = st.data[st.top].i-1;j = st.data[st.top].j;break;//上 case 1:i = st.data[st.top].i;j = st.data[st.top].j+1;break;//右 case 2:i = st.data[st.top].i+1;j = st.data[st.top].j;break;//下 case 3:i = st.data[st.top].i;j = st.data[st.top].j-1;break;//左 } if(mg[i][j] == 0)flag = 1; } if(flag == 1) { st.data[st.top].di = di; st.top++; st.data[st.top].i = i; st.data[st.top].j = j; st.data[st.top].di = -1;//方向不定化 mg[i][j] = -1; } else { mg[st.data[st.top].i][st.data[st.top].j] = 0; st.top --; } if(i == xe&&j == ye) { printf("迷宫路径如下:\n"); for(k = 0;k <= st.top;k++) { printf("\t(%d,%d)\n",st.data[k].i,st.data[k].j);// if((k+1)%5==0)printf("\n"); } printf("\n");break; } }}int main(){ path(1,1,M,N); return 0;}
阅读全文
0 0
- 栈::迷宫问题
- 栈实现-迷宫问题
- 栈-迷宫问题
- 栈求解迷宫问题
- 栈求解迷宫问题
- 迷宫问题(栈)
- 【栈应用】迷宫问题
- 栈应用----迷宫问题
- 迷宫问题(栈)
- 迷宫问题——栈
- 用栈求解迷宫问题 ~~
- 栈实现迷宫求解问题
- 迷宫问题(栈,递归,队列)
- 利用栈求解迷宫问题
- 栈-迷宫求解路径问题
- 迷宫问题(顺序栈)
- 利用栈解决迷宫问题
- 迷宫问题(栈的应用)
- “玲珑杯”ACM比赛 Round #21【石子合并O(n^2)】
- 快速排序
- 信号与系统课上一些非系统性matlab函数概念
- sdk
- Windows 2003 群集环境搭建
- 迷宫问题(栈)
- 牛课堂左神算法题总结
- CentOS7下rsync实现服务器之间实时同步
- 循环链表的经典问题
- 图-邻接矩阵
- USB HID设备报告描述符详解
- 29_Break rules
- Spring Boot:消费一个RESTful的网络服务(译)
- 1.Python进阶笔记——jython