C语言简单迷宫问题,深搜,通俗易懂。
2017-12-01 11:34
113 查看
简单迷宫深搜-C
[align=left]表示新人,大神勿喷,欢迎给出建议。[/align][align=left]在网上搜了一些深搜,发现看不懂,就把自己写的贴出来,还是比较好理解。[/align]
[align=left]自己出的小迷宫题:给出迷宫,求出共多少方法,和最小最大路程。0表示可走,1表示墙,不可走。*表示入口,#表示出口。[/align]
[align=left]以下为代码,因为需要打印出各种路线,所以“+”号表示所走的路[/align]
#include<stdio.h> char a[50][50]; int n,m,time=0,min=1000,max=-1;//n行,m列的迷宫 int main() { while(scanf("%d%d%*c",&n,&m)!=EOF) { int i,ii,jj,j,sum=0;//ii,jj为入口地址 ,sum为多少种方法 for(i=0;i<n;i++)//给出迷宫 gets(a[i]); for(i=0;i<n;i++) for(j=0;j<m;j++) if(a[i][j]=='*'){ii=i;jj=j;break;} //找出入口ii,jj void sumserch (int ii,int jj,int *sum);//函数申明 sumserch(ii,jj,&sum); printf("迷宫共有%d种解法,最短距离为%d,最长距离为%d\n",sum,min,max); } } void sumserch(int ii,int jj,int *sum) { time++; // 经过路程 if(a[ii][jj]=='+'||a[ii][jj]=='1'||ii>=n||ii<0||jj<0||jj>=m) //当不可走时,就退后,路程减一 {time--;return;} if(a[ii][jj]=='#') //找到出口 { (*sum)++; //不知为啥,*sum++就不对,不明所以。 int i,j; for(i=0;i<n;i++) //这一段仅为打印出每种路线,可不要 { for(j=0;j<m;j++) printf("%c ",a[i][j]); printf("\n"); } printf("time=%d\n\n",time); if(time>max)max=time; //是否路程最大 if(time<min) min=time; //是否路程最小 time--; //回退一步,找其他路线 return; } a[ii][jj]='+'; //把当前所处位置变为不可走,已经走过 sumserch(ii+1,jj,sum); //向上 sumserch(ii-1,jj,sum); //向下 sumserch(ii,jj+1,sum); //向右 sumserch(ii,jj-1,sum); //向左 a[ii][jj]='0'; //当前位置所有方向都搜索过了,重新变为可走。 time--; 4000 //回退一步 }
转载请注明出处,谢谢。
相关文章推荐
- C语言对搜索的简单应用(迷宫问题
- 简单的实现迷宫问题
- 【C语言】迷宫游戏设计思路与功能体会及简单的改进报告
- 用纯C语言解决迷宫问题,简洁易懂
- [kuangbin带你飞]专题一 简单搜索 K - 迷宫问题 POJ 3984
- 基于C语言实现简单的走迷宫游戏
- BFS之最简单的迷宫问题(并打印路径)
- 迷宫问题--非递归回溯 C语言实现
- C语言实现迷宫求解问题(附源代码)
- 简单剖析C语言中的位扩展问题
- 厦大C语言上机 1391 简单的几何问题
- [kuangbin带你飞]专题1 简单搜索 K - 迷宫问题 POJ - 3984
- 简单的C语言字符串替换问题——
- 数据结构 C语言 队列 迷宫问题
- C语言一个简单问题
- 用C语言解决迷宫问题
- C语言整数类型及printf格式化输出问题总结复习及进制转换的简单实现
- 迷宫问题(c语言)
- c语言之迷宫问题
- poj 迷宫问题(简单题)