http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1269

连着做了三个基本的dfs,终于弄懂了搜索和回溯的过程。

此题要求输出所有路径,首先给每一个点编号0~n+m;则存储时只需存储编号,由编号得到坐标的方式: x = num/m, y = num%m; 由坐标得到编号的方式:num = x*m+y;

注意:本题坐标从(1,1)开始,编号后的坐标从(0,0)开始。

  1. #include <stdio.h>
  2. #include <string.h>
  3. const int Max = ;
  4. int map[Max][Max],vis[Max][Max];
  5. int dir[][] = {{,-},{-,},{,},{,}};//搜索方向,按题意必须是左上右下的顺序
  6. int num[Max*Max],row,col,e_x,e_y,step,flag;
  7.  
  8. void dfs(int x, int y)
  9. {
  10. if(x==e_x-&&y==e_y-)//到达终点就输出此时的路径
  11. {
  12. flag = ;
  13. for (int i = ; i < step; i++)
  14. {
  15. int xx = num[i]/col+;
  16. int yy = num[i]%col+;
  17. printf("(%d,%d)->",xx,yy);
  18. }
  19. printf("(%d,%d)\n",e_x,e_y);
  20. return ;
  21. }
  22. for(int i = ; i < ; i++)
  23. {
  24. int xx = x+dir[i][];
  25. int yy = y+dir[i][];
  26. if(map[xx][yy] == &&xx>=&&yy>=&&xx<row&&yy<col&&!vis[xx][yy])
  27. {
  28. step++;
  29. vis[xx][yy] = ;
  30. num[step] = xx*col+yy;
  31. dfs(xx,yy);
  32. step--;//回溯时去掉路径中重复的点
  33. vis[xx][yy] = ;//恢复现场
  34. }
  35.  
  36. }
  37. }
  38. int main()
  39. {
  40. int s_x,s_y;
  41. flag = ;
  42. step = ;
  43. scanf("%d %d",&row,&col);
  44. memset(vis,,sizeof(vis));
  45. for (int i = ; i < row; i++)
  46. for (int j = ; j < col; j++)
  47. {
  48. scanf("%d",&map[i][j]);
  49. }
  50. scanf("%d %d",&s_x,&s_y);
  51. scanf("%d %d",&e_x,&e_y);
  52. num[] = (s_x-)*col + (s_y-);
  53. vis[s_x-][s_y-] = ;
  54. dfs(s_x-,s_y-);
  55. if (!flag)
  56. puts("-1");
  57. return ;
  58.  
  59. }

sdut1269 走迷宫(dfs)的更多相关文章

  1. NYOJ306 走迷宫(dfs+二分搜索)

    题目描写叙述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩.它经常偷偷跑出实验室,在某个游乐场玩之不 ...

  2. luogu P1238 走迷宫--DFS模板好(水)题

    题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...

  3. openjudge走迷宫(DFS)

    题目: 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走. 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到).只能在水平方向或垂直方向走,不 ...

  4. 走迷宫(DFS)

    题目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2449&cid=1181 目前dfs 里的递归还是不很懂,AC代码如下: #incl ...

  5. HDU_1010——小狗走迷宫DFS

    Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...

  6. sdut 2449走迷宫【最简单的dfs应用】

    走迷宫 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_ 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m) ...

  7. HDU 2102 A计划(BFS/DFS走迷宫)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  8. 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)

    走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方 ...

  9. 百炼3752:走迷宫--栈实现dfs

    3752:走迷宫 总时间限制:  1000ms 内存限制:  65536kB 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最 ...

随机推荐

  1. ProE复杂曲线方程:Python Matplotlib 版本代码(L系统,吸引子和分形)

    对生长自动机的研究由来已久,并在计算机科学等众多学科中,使用元胞自动机的概念,用于生长模拟.而复杂花纹的生成,则可以通过重写一定的生长规则,使用生成式来模拟自然纹理.当然,很多纹理是由人本身设计的,其 ...

  2. makefile 与 make

    所要完成的Makefile 文件描述了整个工程的编译.连接等规则.其中包括:工程中的哪些源文件需要编译以及如何编译.需要创建那些库文件以及如何创建这些库文件.如何最后产生我们想要的可执行文件.尽管看起 ...

  3. 项目关联到svn

    最近因为要升级项目,改用64位的eclipse,原先已经被svn管理的项目需要被复制到另一个工作空间,只需要导入并复制项目到新的工作空间即可 右键,点import 选择已经存在的项目导入工作空间 选择 ...

  4. 基于python xlsxwriter、xlrd 生成测试报告

    import xlsxwriter,xlrd ''' 思路: 1.获取数据 2.整合数据 3.写入文件 ''' #筛选 def filt(category,table,filt_name=None,r ...

  5. vue移动端地址三级联动组件(二)

    继续上一篇: 子组件css: <style scoped lang="less"> #city { width: 100%; height: 100%; positio ...

  6. php第十六节课

    分页 <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 private $ ...

  7. 原型&&原型链一语道破梦中人

    一直对原型和原型链模模糊糊,今天看到一句话,通过这句话再结合我目前对原型和原型链的理解算是让我对原型和原型链有一个更清醒的认识;并且记忆更加深刻; 任何一个对象都有一个隐式原型:__proto__属性 ...

  8. PAT 1103 Integer Factorization

    The K-P factorization of a positive integer N is to write N as the sum of the P-th power of K positi ...

  9. ansible使用jinja2管理配置文件以及jinja2语法简介

    一.Jinja2介绍 Jinja2是基于python的模板引擎,功能比较类似于PHP的smarty,J2ee的Freemarker和velocity.它能完全支持unicode,并具有集成的沙箱执行环 ...

  10. kendo Grid的toolbar自定义

    由于这个toolbar官方进增加了create,save还有一个是_____ 所以想要自定义话就需要使用 下面的代码(这个是MVVM模式) data-toolbar='[{ template: Ken ...