判断迷宫是否可到达目的地的程序
2014-04-07 21:07
267 查看
在写本程序之前,本人已经查看过了一些关于迷宫的一些算法,其中最为经典的算法之一就是A*算法,他们是找出一条能够从始点到终点的路径,这个算法要理解也不容易。现在,我参考一些算法,写一个求出始点是否可到终点的算法,尤为简单,请指教!
其实,在解迷宫的算法思想有两种,一个是把迷宫的每个格点看做有八个方向的算法,另一个是看做四个方向的算法。其实,我们常常接触的迷宫就只是四个方向的算法。现在,本人就写一个迷宫可解(可以到达终点)的算法。很简单,所以就不解释了!
运行结果:
其实,在解迷宫的算法思想有两种,一个是把迷宫的每个格点看做有八个方向的算法,另一个是看做四个方向的算法。其实,我们常常接触的迷宫就只是四个方向的算法。现在,本人就写一个迷宫可解(可以到达终点)的算法。很简单,所以就不解释了!
//迷宫算法,判断始点与终点是否可达 #include<stdio.h> #include<stdlib.h> #define maxn 20 int mg[maxn][maxn],stx,sty,ex,ey,n,p=0; int stack[maxn*maxn],top=0; void push(int x,int y) { stack[top]=x; top++; stack[top]=y; top++; } void pop() { top--; sty=stack[top]; top--; stx=stack[top]; } int findpath() { printf("输出所走过的路径:\n"); while(stx!=ex || sty!=ey) { printf("(%d,%d)=>",stx,sty); mg[stx][sty]=2; if(mg[stx-1][sty]==0) { push(stx-1,sty); p=1; } if(mg[stx][sty-1]==0) { push(stx,sty-1); p=1; } if(mg[stx+1][sty]==0) { push(stx+1,sty); p=1; } if(mg[stx][sty+1]==0) { push(stx,sty+1); p=1; } if(top>0) { pop(); p=0; continue; } if(p==0) break; } if(stx==ex && sty==ey) return 1; return 0; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%d",&mg[i][j]); } } printf("输入始、终点坐标(如x1 y1 x2 y2):\n"); scanf("%d %d %d %d",&stx,&sty,&ex,&ey); for(int i=0;i<=n+1;i++) { mg[0][i]=1; mg[n+1][i]=1; } for(int i=0;i<=n+1;i++) { mg[i][0]=1; mg[i][n+1]=1; } printf("原迷宫:\n"); for(int i=0;i<=n+1;i++) { for(int j=0;j<=n+1;j++) { printf("%d ",mg[i][j]); } printf("\n"); } int dd=findpath(); printf("走过后的迷宫:\n"); for(int i=0;i<=n+1;i++) { for(int j=0;j<=n+1;j++) { printf("%d ",mg[i][j]); } printf("\n"); } if(dd==1) printf("可达!\n"); else printf("不可达!\n"); system("pause"); return 0; }
运行结果:
相关文章推荐
- 创建.so动态库
- SQL Error: 1064, SQLState: 42000数据库异常
- Codeforces Round #240 (Div. 2)
- POJ 2318 TOYS (矩形内判断点与线段关系,水)
- HDOJ-4311 Meeting point-1
- 链表线性表
- java验证卡布列克常数
- opencv入门Vec3f
- C/C++混合编程--extern “C” 使用方法详解
- java设计模式之迭代器模式iterator
- 动态规划——01背包问题
- Android 蓝牙开发实例--蓝牙聊天程序的设计和实现
- Pat(Advanced Level)Practice--1048(Find Coins)
- 函数调用
- 树状数组优化 之 uva299
- 《算法导论》笔记 第7章 7.1快速排序的描述
- 记录我的英语道路
- 记录我的英语道路
- 《算法导论》笔记 第7章 7.1快速排序的描述
- 树状数组优化 之 uva299