八方向迷宫寻路的全部路径
来源:互联网 发布:淘宝网投诉卖家有用吗 编辑:程序博客网 时间:2024/05/17 04:06
八方向迷宫,可寻出全部路径
最外层需要全部放1
写的比较粗糙,日后改进
#include <iostream>using namespace std;int StepComplete;int ans=0;void cin_maze(int **a,int row,int column){ for (int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { cin>>a[i][j]; } }}void print(int **maze_path,int h,int w){ cout<<"The path is "<<endl; for (int i = 0;i < h;++i) { for (int j = 0;j < w;++j) { if(maze_path[i][j]) cout<<"* "; else cout<<" "; } cout << endl; }}//传入迷宫数组,迷宫最终路径数组,行数,列数,首次查找的X坐标,Y坐标,和查找步数void dfs(int **maze, int **maze_path, int w, int h, int x, int y, int step){ int TempStep=step;//表示传进来时试探到第几步 if (x==(w-2) && y==(h-2)) { ans++; cout<<ans<<endl; maze_path[x][y]=1; print(maze_path,w,h); maze_path[x][y]=0; return; } else { StepComplete=0; while (StepComplete<9) { switch (StepComplete) { case 0:if (maze[x][y-1]==0&&maze_path[x][y-1]==0)//正左逆时针开始 { maze_path[x][y]=1; maze[x][y]=2; dfs(maze,maze_path,h,w,x,y-1,StepComplete); maze_path[x][y]=0; maze[x][y]=0; };break; case 1:if (maze[x+1][y-1]==0&&maze_path[x][y]==0) { maze_path[x][y]=1; maze[x][y]=2; dfs(maze,maze_path,h,w,x+1,y-1,StepComplete); maze_path[x][y]=0; maze[x][y]=0; };break; case 2:if (maze[x+1][y]==0&&maze_path[x+1][y]==0) { maze_path[x][y]=1; maze[x][y]=2; dfs(maze,maze_path,h,w,x+1,y,StepComplete); maze_path[x][y]=0; maze[x][y]=0; };break; case 3:if (maze[x+1][y+1]==0&&maze_path[x+1][y+1]==0) { maze_path[x][y]=1; maze[x][y]=2; dfs(maze,maze_path,h,w,x+1,y+1,StepComplete); maze_path[x][y]=0; maze[x][y]=0; };break; case 4:if (maze[x][y+1]==0&&maze_path[x][y+1]==0) { maze_path[x][y]=1; maze[x][y]=2; dfs(maze,maze_path,h,w,x,y+1,StepComplete); maze_path[x][y]=0; maze[x][y]=0; };break; case 5:if (maze[x-1][y+1]==0&&maze_path[x-1][y+1]==0) { maze_path[x][y]=1; maze[x][y]=2; dfs(maze,maze_path,h,w,x-1,y+1,StepComplete); maze_path[x][y]=0; maze[x][y]=0; };break; case 6:if (maze[x-1][y]==0&&maze_path[x-1][y]==0) { maze_path[x][y]=1; maze[x][y]=2; dfs(maze,maze_path,h,w,x-1,y,StepComplete); maze_path[x][y]=0; maze[x][y]=0; };break; case 7:if (maze[x-1][y-1]==0&&maze_path[x-1][y-1]==0) { maze_path[x][y]=1; maze[x][y]=2; dfs(maze,maze_path,h,w,x-1,y-1,StepComplete); maze_path[x][y]=0; maze[x][y]=0; };break; case 8:StepComplete=TempStep;return;//试探到第八步的时候返回上一层试探,并把StepComplete设为上一层试探到的步数 default: break; } StepComplete++; } }}int main(){ int row,column; cout<<"请输入迷宫的行数:"<<endl; cin>>row; cout<<"请输入迷宫的列数:"<<endl; cin>>column; int **a = new int* [row]; int **maze_path = new int* [row]; for (int i = 0; i < row; i++) { a[i] = new int[column]; } for (int i = 0; i < row; i++) { maze_path[i] = new int[column]; } //将maze_path赋初值 for (int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { maze_path[i][j]=0; } } cout<<"请输入迷宫:"<<endl; cin_maze(a,row,column); dfs(a,maze_path,row,column,1,1,0); return 0;}
阅读全文
1 0
- 八方向迷宫寻路的全部路径
- 迷宫寻路(八方向)
- 关于八方向的迷宫问题
- 简单的八方向寻路算法
- 八方向迷宫 C++版
- BFS - 八方向迷宫问题
- 迷宫问题(八方向)
- 一个高效的a *寻路算法(八方向)
- 一个高效的A-star寻路算法(八方向)
- 一个高效的A-star寻路算法(八方向)(
- 数据结构——八方向探索迷宫问题解答
- 八方向行走脚本
- NGUI八方向
- 图像八方向链码的边界跟踪算法
- 八方向移动限制想法
- 迷宫的最优路径
- 迷宫的路径问题
- 基于Processing的人物八方向移动演示:X,Y,XY同时到达移动
- linux的简单命令学习
- ajaxSubmit的使用
- .h头文件、 .lib库文件、 .dll动态链接库文件之间的关系
- java中的BigDecimal和String的相互转换
- Kotlin学习之-5.9 内部类
- 八方向迷宫寻路的全部路径
- Java通用的Excel文件生成工具类,支持生成文件和浏览器直接下载
- 内核知识
- js异步加载调试
- BigDecimal加减乘除运算
- Pthread定义
- Django_form 简易使用收录
- RID枚举工具RidEnum
- 和代码的青春七年