(递归+非递归)迷宫求解
来源:互联网 发布:mac qq怎么截图 编辑:程序博客网 时间:2024/06/16 04:47
代码如下:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<queue>#include<stack>#include<iostream>#include<algorithm>using namespace std;int map[50][50],visited[50][50],rout[50][50];int dir[][2]={0,1,1,0,0,-1,-1,0};//方向二维数组:0右,1下,2左,3上 int m,n;//----------------------递归求解---------------------void init();int judge(int x,int y);void dfs(int x0,int y0);//------------------------非递归--------------------- struct add{int x;int y;int d;};void find(){stack<add> s;add a1;a1.x=a1.y=1; s.push(a1);while(!s.empty()){add tep,e;tep=s.top(); s.pop();if(tep.x==m && tep.y==n){printf("倒序输出从(1,1)到(m,n)的路径\n");printf("x=%d y=%d\n",m,n);while(!s.empty()){e=s.top();s.pop();printf("x=%d y=%d d=%d\n",e.x,e.y,e.d);}return ;}if(judge(tep.x+dir[0][0],tep.y+dir[0][1])){e.x=tep.x;e.y=tep.y;e.d=0;s.push(e);e.x=tep.x+dir[0][0];e.y=tep.y+dir[0][1];visited[e.x][e.y]=1;s.push(e);}else if(judge(tep.x+dir[1][0],tep.y+dir[1][1])){e.x=tep.x;e.y=tep.y;e.d=1;s.push(e);e.x=tep.x+dir[1][0];e.y=tep.y+dir[1][1];visited[e.x][e.y]=1;s.push(e);}else if(judge(tep.x+dir[2][0],tep.y+dir[2][1])){e.x=tep.x;e.y=tep.y;e.d=2;s.push(e);e.x=tep.x+dir[2][0];e.y=tep.y+dir[2][1];visited[e.x][e.y]=1;s.push(e);}else if(judge(tep.x+dir[3][0],tep.y+dir[3][1])){e.x=tep.x;e.y=tep.y;e.d=3;s.push(e);e.x=tep.x+dir[3][0];e.y=tep.y+dir[3][1];visited[e.x][e.y]=1;s.push(e);}else{s.pop();}}}int main(){//m表示行数,n表示列数 init();printf("请输入m,n的大小\n");cin>>m>>n;printf("请输入迷宫\n");for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){cin>>map[i][j];}}rout[1][1]=visited[1][1]=1;find();//dfs(1,1);return 0;}//-----------------递归------------------- void init() {for(int i=0;i<50;i++){for(int j=0;j<n;j++){visited[i][j]==0;rout[i][j]==0;}}memset(map,0,sizeof(map));memset(visited,0,sizeof(visited));memset(rout,0,sizeof(rout));}int judge(int x,int y){if(visited[x][y]==0 && map[x][y]==0 && x>0 && x<=m && y>0 && y<=n)return 1;return 0;}void dfs(int x0,int y0){if(x0==m && y0==n){printf("路径如下:\n");for(int i=1;i<=m;i++){for(int j=1;j<=n;j++)printf("%d ",rout[i][j]);printf("\n");}return ;}else{for(int i=0;i<4;i++){if(judge(x0+dir[i][0],y0+dir[i][1])){rout[x0+dir[i][0]][y0+dir[i][1]]=1;visited[x0+dir[i][0]][y0+dir[i][1]]=1;dfs(x0+dir[i][0],y0+dir[i][1]);rout[x0+dir[i][0]][y0+dir[i][1]]=0;visited[x0+dir[i][0]][y0+dir[i][1]]=0;}}}}
0 0
- (递归+非递归)迷宫求解
- 迷宫问题递归与非递归求解
- 迷宫问题求解(C++非递归程序)
- 迷宫路径的求解(非递归方法和递归方法)
- 迷宫递归求解
- 递归求解迷宫问题
- 迷宫问题递归求解
- 递归实现迷宫求解
- 迷宫求解非递归 DFS BFS(应用栈和队列)
- 递归法求解迷宫问题
- 求解迷宫算法 递归法
- 迷宫问题的递归求解
- 【数据结构】递归求解迷宫问题
- 迷宫问题 非递归(java版)
- !采用递归和非递归方法求解F(n)
- 二叉树深度求解(递归,非递归)
- 迷宫的非递归算法
- 迷宫求解问题-递归(栈的应用)
- 关于button的默认类型
- 【Maven】Project configuration is not up-to-date with pom.xml错误解决方法
- MySQL Sleep连接过多问题解决方法
- 自定义jQuery插件的写法
- Python学习(五)—sorted排序函数
- (递归+非递归)迷宫求解
- java XML导出
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
- 顺序表应用2:多余元素删除之建表算法
- Qt creator5.7 OpenCV249之双边滤波(含源码下载)
- 广播接收机制,广播发送者,广播接收者
- Android开发学习之路--性能优化之常用工具
- 理解对象关系持久层
- 在linux下安装opencv(参照官网)