问题描述:

2015年05月21日 10:24:05

这是我自己出的一道题   其原型基于迷宫问题,用深搜来解决的!我就简单的说一说吧!

给定一个N * M 的迷宫!,1代表有障碍,0代表无障碍可通行的!

每个迷宫只可以有一个起始点和一个出口!,但可以0或多条通往出口的路。

程序会自动计算出有多少条通往出口的路!分别用s 来代表起点 e代表终点

约定

N,M <= 1000

样例输入

N = 4

M = 4

s010

1000

1100

e001

输出

2

这个问题我用的是深度搜索来解决的。当然还有很多种算法也可以解决这样的问题。如果有同学有比我的这个更好的算法我很欢迎告诉我。我也要学习学习!

深度搜索的意图是很明显的,它的用法是先检查一个节点,如果有子节点它会继续遍历下去,如果没有就会回溯回去,有点类似于前序遍历!

#include /*

**开始设计时间:2015-05-21 10:35:19

**设计思路:这道题我是打算用深搜来做的了。

** 我在思考的一个问题就是怎样才能让程序不走回头路!我的想法是在程序进栈时

** 就把这现在处于的这个点赋值为1.这样就能保证程序不会走回头路!

**设计结束时间:2015年05月21日 12:49:49

**总结:中间吃了个饭。设计过程中出现了两个问题,一个是main函数中的那个if(maze[i][j] == 's') break跳出来直跳了一个

**就导致了没能进入DFS

**第二个问题是:进入了DFS之后发现怎样结果都是0,问题在于赋值在判断之前,连带e也给赋值掉了!。所以就一直是0

**这些问题都不算大,逻辑起码还算清晰,就是有点没睡醒,!加油把 talent。

*/

#define Test 0

#define MAX 1000

int N,M,ans = 0;

char maze[MAX][MAX + 1];

struct dir{

int dx;

int dy;

}d[4] = {

{1,0},//up

{-1,0},//down

{0,-1},//left

{0,1}//right

};

int

DFS_maze(int x,int y)

{

int i,nx,ny;

if( maze[x][y] == 'e' )

{

ans++;

return 1;

}

//记录并赋值为1

char temp = maze[x][y];

maze[x][y] = '1';

for(i = 0;i < 4;i++)

{

nx = x + d[i].dx;

ny = y + d[i].dy;

if( nx < N && nx >= 0 && ny < M && nx >= 0 && ( maze[nx][ny] == '0' || maze[nx][ny] == 'e' ) )

DFS_maze(nx,ny);

}

maze[x][y] = temp;

return 0;

}

int

main(void)

{

int i = 0,j;

scanf("%d%d",&N,&M);

while( i < N )

{

scanf("%s",maze[i]);

i++;

}

#if Test

i = 0;

while( i < N )

puts(maze[i++]);

#endif // test success

for(i = 0;i < N; i++)

{

for(j = 0; j < M; j++)

if( maze[i][j] == 's' )

break;

if( maze[i][j] == 's' )

break;

}

#if Test

putchar(maze[0][0]);

printf("i = %d j = %d\n",i,j);

#endif

if( i < N && j < M )

{

DFS_maze(i,j);

printf("%d\n",ans);

}

else

printf("程序没有搜索到起点!请设置起点\n");

return 0;

}

迷宫问题最短捷径c语言深搜,迷宫问题 C语言实现(深搜)相关推荐

  1. c语言课程设计走迷宫游戏,C语言课程设计-迷宫游戏.doc

    计算机技术基础课程设计 C语言 设计报告 题目:完整的二维迷宫游戏 学院:工商管理学院 专业:信息系统与信息管理 班级:050507 姓名:孙月 指导教师:张首伟 设计日期:2004年12月10日 题 ...

  2. c语言八个方向迷宫课程设计,【精品资料最新版】C语言课程设计-迷宫游戏.doc...

    计算机技术基础课程设计 C语言 设计报告 题目:完整的二维迷宫游戏 学院:工商管理学院 专业:信息系统与信息管理 班级:050507 姓名:孙月 指导教师:张首伟 设计日期:2004年12月10日 题 ...

  3. c语言迷宫求解毕业设计,毕业设计(论文)-基于Windows平台C语言实现迷宫游戏的设计.doc...

    基于Windows平台C语言实现迷宫游戏的设计 摘 要 随着科技的日益发展,计算机信息知识越来越被人们所认知和使用,在当今知识爆炸的时代计算机毫无疑问成为人们常用的日常工具,而Windows和C语言都 ...

  4. 用C语言做一个迷宫小游戏

    用C语言做一个迷宫小游戏,以下是代码段 这个迷宫游戏使用了递归回溯算法来寻找通往出口的路径.迷宫中的墙用'#'表示,路径用空格表示,入口和出口分别用'S'和'E'表示,已走过的路径用'*'表示.在生成 ...

  5. c语言课程设计报告之迷宫,C语言课程设计-迷宫游戏

    <C语言课程设计-迷宫游戏>由会员分享,可在线阅读,更多相关<C语言课程设计-迷宫游戏(15页珍藏版)>请在人人文库网上搜索. 1.计算机技术基础课程设计C语言设计报告题目:完 ...

  6. 迷宫游戏c语言代码讲解,迷宫游戏C语言代码讲解.doc

    /*迷宫游戏 by CDQ*//*vc++ 6.0 编译成功本程序参照网上一个特殊算法随机生成迷宫该算法优点:效率高,从入口到出口只有唯一路径,入口出口自己设定该算法缺点:宽度高度都必须为奇数,只能生 ...

  7. 迷宫游戏纯c语言代码,C++ 迷宫游戏实现代码

    C++ 迷宫游戏实现代码 题目 通过让游戏角色自动寻找迷宫出口,走出迷宫,来练习C++面向对象之封装的基础知识.迷宫图如下所示,其中X表示墙. 1.程序分析 走出去的原理:遵循右手规则或左手规则.右手 ...

  8. 如何使用C语言实现简单迷宫(递归和非递归实现 含图例)

    1.非递归实现 简单迷宫:只有一条通路的迷宫 思路:在找迷宫通路的时候,我们往往是在给定入口(入口合法且为通路)的情况下,沿着入口的某个方向走(此方向是通路).现给定走迷宫的方向:上.左.右.下,即优 ...

  9. 信息学奥赛一本通 1254:走出迷宫 | OpenJudge NOI 2.5 6264:走出迷宫

    [题目链接] ybt 1254:走出迷宫 OpenJudge NOI 2.5 6264:走出迷宫 [题目考点] 1. 广搜 迷宫问题 [解题思路] 广搜,迷宫问题模板题. 当数据量很小时,用深搜的方法 ...

最新文章

  1. Ubuntu Vim YouCompleteMe 安装
  2. Android数据存储(三)——SQLite
  3. 每天一点小知识004--关于获取物体名字
  4. mat工具MemoryAnalyzer进行分析java内存溢出hprof文件
  5. python网页表格读取_是否可以读取网页html表格数据?
  6. winsock错误一览表
  7. 在VIM中使用GDB调试 – 使用pyclewn
  8. sql server2000的1433端口不通怎么办
  9. c语言转换说明符总结(%d,%i,%u,%f,%o,%x,%X,%p,%s,%g,%e)
  10. CAD2020下载AutoCAD2020下载安装详细教程
  11. Arduino学习总结
  12. 写一函数,将一个3*3的整型矩阵转置。
  13. 如何改变计算机内存配置文件,电脑内存使用率过高怎么解决?教你如何调整内存大小...
  14. Unity鼠标拖拽旋转拉远拉近场景
  15. SpaceShooter打飞机教程笔记(四)
  16. [emWin]利用内存设备加速GIF图片显示——2021.03
  17. Transformer解读之:Transformer 中的 Attention 机制
  18. linux魔兽世界黑屏,在UBUNTU下玩魔兽世界并不轻松。许多问题无法自己解决,请有兴趣的...
  19. 百度地图API获取某个行政区
  20. http请求报错:80 failed to respond

热门文章

  1. 如何解决Win10不能新建项目的问题?
  2. 微信支付异常:appid and openid not match
  3. npm ERR! missing script: dev 解决方案
  4. java命令行执行程序解决依赖外部jar包的问题
  5. 如何在React Native中记录日志?
  6. Android - 启动器图标大小
  7. [51nod1965]奇怪的式子(Min_25筛)
  8. 浅谈网络爬虫中广度优先算法和代码实现
  9. 小白们应当知道的配置系统变量PATH 的小技巧。
  10. 初学 Python(十三)——匿名函数