又是这个题,上学期看过,但当时没能力自己写下来,只是把别人的代码认真的看了一遍。今天,终于自己把它给弄出来了。嘿嘿,经过自己思考的才能真正成为自己的东西。把这题做出来,可以说把DFS最基本的东西理解了。还应该学会灵活应用,那就得看日后的多多练习了。加油。

题目大意:输入一个h*w的矩阵,1表示blocks,0表示空白,2表示起点,3表示出口。寻找各种可以出来的方法。

simple input:

4 4                                   
1201
1100
3010
1000
0 0

simple ouput:

#include <iostream>#include <cstdio>#include <fstream>#include <memory.h>

#define MAX 10using namespace std;

int dir[4][2]={0,1,-1,0,0,-1,1,0};int map[MAX][MAX];char s[10];int w,h;int start[2],end[2];int flag;

struct node{int x,y,fa;    node(int x1,int y1,int fa1)    {        x=x1;y=y1;fa=fa1;    }    node(){}}nn[100];

void getmap(){for(int i=0; i<h ; i++)    {        scanf("%s",s);        getchar();for(int j=0 ; j<w ;j++)        {           map[i][j]=s[j]-'0';if(map[i][j]==2)          {            start[0]=i;            start[1]=j;            map[i][j]=1;          }if(map[i][j]==3)          {              end[0]=i;              end[1]=j;          }        }    }}

void printmap(int k){if(k==0) return;else    {        printmap(nn[k].fa);        printf("(%d,%d,%d) ",nn[k].x,nn[k].y,nn[k].fa+1);    }}

void dfs(int x,int y,int step){int sx,sy;if(x==end[0] && y==end[1])    {        flag=1;        nn[step+1]=node(x,y,step);        printmap(step);        printf("\n");return;    }for(int i=0; i<4; i++)    {        sx=x+dir[i][0];        sy=y+dir[i][1];if(map[sx][sy]!=1 && sx>=0 && sx<h && sy>=0 && sy<w)        {            nn[step+1]=node(sx,sy,step);            map[sx][sy]=1;            dfs(sx,sy,step+1);            map[sx][sy]=0;        }    }}int main(){    freopen("acm.txt","r",stdin);while(scanf("%d%d",&h,&w)!=EOF && (w+h))    {      flag=0;      getmap();      nn[1]=node(start[0],start[1],0);      dfs(start[0],start[1],1);if(!flag)      {          printf("Impossible!\n");      }    }return 0;}

转载于:https://www.cnblogs.com/Jason-Damon/archive/2012/03/12/2392189.html

The problem of maze(经典迷宫问题) DFS版相关推荐

  1. 经典迷宫问题(C++)简单DFS算法

    经典迷宫问题(C++) *给出一个起点S 输入地图 '.' 代表可以走 ' '代表墙壁不能走 'T'代表终点 question:判断是否能够能从到达终点 (不要求最短路径) thinking and ...

  2. 蛮力法 —— 求解迷宫问题 —— DFS和BFS

    求解迷宫问题 问题描述: 有如图8×8的迷宫 OXXXXXXX OOOOOXXX XOXXOOOX XOXXOXXO XOXXXXXX XOOOOXOO XXXXXXXO 其中,O表示通路方块,X表示 ...

  3. Word Maze单词迷宫C语言解法(详细注解)

    Word Maze单词迷宫C语言解法(详细注解) 题目描述 C语言代码 DFS算法 题目描述 Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.假设给定 ...

  4. 2015年华为实习生机试样题(记票统计,计算麻将的番数,Word Maze(单词迷宫))

    这是华为今年实习生招聘给的样题,还是特别喜欢考字符串处理问题. 记票统计 描述: 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用"A"."B" ...

  5. 华为软件类校招 2014年9月3日 熟悉机考环境 1.记票统计 2.求最大递增数 3.Word Maze(单词迷宫)

    (样题,已对外公布)记票统计 描述: 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用"A"."B"."C"." ...

  6. 蓝桥杯-迷宫(DFS)

    蓝桥杯-迷宫(DFS) 题目描述 X 星球的一处迷宫游乐场建在某个小山坡上.它是由 10 \times 1010×10 相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡 ...

  7. HDU杭电OJ经典100题2000-2099_Java版详细题解(持续更新)

    今年寒假打算用Java把杭电2000-2099全部AC(现在持续更新),如下是题目链接,之后是我的题解,全部做完后我会把所有AC的题解打包上传的 题号 题名 题号 题名 2000 ASCII码排序 2 ...

  8. dfs版SPFA判负环

    例题 Description 泡泡鱼是一条调皮的鱼,ta的家住在一片珊瑚礁上.在ta的眼里,这些珊瑚礁的形态可以脑补成一个n个节点,m条边的带权图,在海水的腐蚀下,这些珊瑚礁形成了许多的环,ta想考考 ...

  9. 《iOS 8应用开发入门经典(第6版)》——第1章,第1.6节小结

    本节书摘来自异步社区<iOS 8应用开发入门经典(第6版)>一书中的第1章,第1.6节小结,作者 [美]John Ray(约翰 雷),更多章节内容可以访问云栖社区"异步社区&qu ...

最新文章

  1. 看似简单的问题 静态方法和实例化方法的区别
  2. android 工程中引入第三方JAR包后安装APK时老是提示找不到库文件?
  3. Apache Camel 3的工作终于开始了
  4. mydate97设置时间
  5. Firefox搜索框:自动出现添加搜索的提示
  6. 写代码需要注意的几方面
  7. asp.net 报表页面模板_Stimulsoft ASP.NET MVC报表教程:在设计器中保存报表模板
  8. WebView断网提示
  9. 13个不容错过的Java项目
  10. 基于RFID技术的智能交通解决方案
  11. bzoj 1984: 月下“毛景树”
  12. 怎样打开t6系统服务器,t6客户端如何连接服务器
  13. zookeeper-集群-选举机制
  14. 小梅哥Xilinx FPGA学习笔记10——串口通信发送
  15. 蛮荒搜神记服务器在维护,蛮荒搜神记法宝洗练图文教程 蛮荒搜神记如何提升战斗力?-游侠网...
  16. python递归解压文件_递归调用解压zip包或rar包
  17. 计算机文件查看隐藏文件,电脑隐藏文件怎么显示啊,明明点了显示所有文件,按了确定后,又恢复了原来样子,为什么啊...
  18. @Deprecated(注解)
  19. as5300g2 nas软件功能_硬件与软件齐飞,首款支持2.5G网络的品牌NAS-华芸AS-5202T测评体验...
  20. 云计算的“傲慢”与“偏见”

热门文章

  1. winccweb发布画面不显示_wincc web navigator 发布用户名或密码错误问题
  2. Spring启动的流程
  3. TrueCommand是什么
  4. 在承德避暑山庄里待过,给你的最大感受是什么?
  5. 晨跑喝黑咖啡对身体有什么影响?
  6. 游戏主播们为什么早上不玩游戏?直播圈里还有哪些不成文的规定呢?
  7. 散酒到底多少钱才是纯酿的
  8. 银行卡不销卡,对持卡人有没有什么影响?
  9. I have to mention the search function at the
  10. Qt4_读取和写入二进制数据