逃离迷宫

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12621    Accepted Submission(s): 3019

Problem Description
给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍, 她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,gloria不能走到迷宫外面去。令人头痛的是,gloria是个没什 么方向感的人,因此,她在行走过程中,不能转太多弯了,否则她会晕倒的。我们假定给定的两个位置都是空地,初始时,gloria所面向的方向未定,她可以 选择4个方向的任何一个出发,而不算成一次转弯。gloria能从一个位置走到另外一个位置吗?
Input
第1行为一个整数t (1 ≤ t ≤ 100),表示测试数据的个数,接下来为t组测试数据,每组测试数据中,
  第1行为两个整数m, n (1 ≤ m, n ≤ 100),分别表示迷宫的行数和列数,接下来m行,每行包括n个字符,其中字符'.'表示该位置为空地,字符'*'表示该位置为障碍,输入数据中只有这两种字符,每组测试数据的最后一行为5个整数k, x1, y1, x2, y2 (1 ≤ k ≤ 10, 1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m),其中k表示gloria最多能转的弯数,(x1, y1), (x2, y2)表示两个位置,其中x1,x2对应列,y1, y2对应行。
Output
每组测试数据对应为一行,若gloria能从一个位置走到另外一个位置,输出“yes”,否则输出“no”。
Sample Input
2
5 5
...**
*.**.
.....
.....
*....
1 1 1 1 3
5 5
...**
*.**.
.....
.....
*....
2 1 1 1 3

Sample Output
no
yes
参考代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<string>
 6 #include<cmath>
 7 #include<queue>
 8 using namespace std;
 9 int m,n,x2,y2,k;
10 char map[105][105];
11 int vis[105][105];//标记走过,顺便标记这个位置上走过的,拐了几个弯
12 int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
13 struct Node
14 {
15     int x,y,step,fx;
16 };
17 int bfs(int x1,int y1)
18 {int fangxiang,i;
19     Node now,eed;
20     vis[x1][y1]=0;//没走过的都标记为-1
21     queue<Node>Q;
22     eed.x=x1;eed.y=y1;eed.step=0;eed.fx=0;
23     Q.push(eed);
24     while(!Q.empty())
25     {
26         now=Q.front();
27           Q.pop();
28         if(now.x==x2 && now.y==y2 && now.step<=k)
29             return 1;
30         for(i=0;i<4;i++)
31         {
32             eed.x=now.x+dir[i][0];eed.y=now.y+dir[i][1];
33             fangxiang=i+1;//1代表向左走,2代表向上走,3代表向右走,4代表向下走;
34             if(now.fx==0)//一下三个判断是判断和之前的方向是否一致
35                 {eed.fx=fangxiang;eed.step=0;}
36             else if(now.fx!=fangxiang)
37                         {
38                             eed.step=now.step+1;eed.fx=fangxiang;//方向不一致的话,加上1
39                         }
40             else {eed.step=now.step;eed.fx=now.fx;}
41             if(eed.x>=1 && eed.x<=m && eed.y>=1 && eed.y<=n && eed.step<=k && map[eed.x][eed.y]=='.')
42                      {
43                          if(vis[eed.x][eed.y]!=-1 && eed.step<=vis[eed.x][eed.y])
44                          {//如果这个点被走过,但是下一个走的拐的弯比前一个少的话,依然下一个能走,顺便记录拐的弯数
45                              Q.push(eed);vis[eed.x][eed.y]=eed.step;
46                          }
47                         else if(vis[eed.x][eed.y]==-1)
48                          {
49                          Q.push(eed);vis[eed.x][eed.y]=eed.step;
50                          }
51                      }
52         }
53     }
54     return 0;
55 }
56 int main()
57 {
58     int i,j,t,x1,y1;
59     cin>>t;
60     while(t--)
61     {
62         cin>>m>>n;
63         for(int i=1;i<=m;i++)
64             for(int j=1;j<=n;j++)
65             {
66                  cin>>map[i][j];
67                  vis[i][j]=-1;
68             }
69         scanf("%d %d %d %d %d",&k,&y1,&x1,&y2,&x2);
70     if((x1==x2 && y1==y2)|| bfs(x1,y1)==1)
71             printf("yes\n");
72             else printf("no\n");
73     }
74     return 0;
75 }

hdoj 1728 逃离迷宫相关推荐

  1. hdu 1728 逃离迷宫 (bfs)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  2. HDU 1728 逃离迷宫(BFS的优化)

    这一题,有两个地方需要注意:(除了题目令人窒息的行列的x y设置) ①转弯如何判断? 需要给转弯的方向赋值.通常,我们在节点向四个方向延伸的时候,喜欢这样 int nextx[4]={0,0,-1,1 ...

  3. HDU ACM 1728 逃离迷宫 (广搜BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:给出一张图,转弯数k,起点(x1,y1),(x2,y2)判断能不能最多只转k个弯时从起点走到终点 输 ...

  4. hdu 1728 逃离迷宫(dFS+优先队列)

    求转弯最少的走路方式!!!! #include<stdio.h> #include<string.h> #include<queue> using namespac ...

  5. HDU 1728 逃离迷宫

    给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位 ...

  6. HDU 1728 逃离迷宫【BFS】

    题意:给出一个起点,一个终点,规定的转弯次数,问能否在规定的转弯次数内到达终点--- 这一题是学(看)习(题)的(解)@_@ 主要学了两个地方 一个是剪枝,如果搜到的当前点的转弯次数小于该点turn数 ...

  7. HDU - 1728 逃离迷宫(bfs)

    题目链接:点击查看 题目大意:给出起点和终点和最多的拐弯次数k,问拐弯次数能否在小于等于k的情况下从起点到达终点 题目分析:bfs,不过和以往的不太一样,以往的bfs都是每次加入一个点,而这个题目的限 ...

  8. hdu 4524 郑厂长系列故事——逃离迷宫

    点击打开链接 郑厂长系列故事--逃离迷宫                                                                               T ...

  9. 逃离迷宫的路径(打印路径)

    题目描述 现在有一个5*5的迷宫,起点在左上角,终点在右下角,现在请你来写一个程序计算一下,LZY从起点开始走迷宫,最终能否成功的逃离迷宫? 如果LZY可以逃出迷宫,请输出逃离迷宫的最短路径,否则输出 ...

最新文章

  1. Android 中Message,MessageQueue,Looper,Handler详解+实例
  2. 在RHEL7.8上安装配置tomcat
  3. DL之DNN优化技术:利用Dropout(简介、使用、应用)优化方法提高DNN模型的性能
  4. 初步了解react-babel-虚拟DOM-JSX-类组件-函数式组件
  5. 每天Leetcode 刷题 初级算法篇-有效的括号
  6. 事务到底是隔离的还是不隔离的?
  7. elasticsearch 请求全部数据
  8. 【报告分享】 知乎:2020「知+」产品手册(附下载)
  9. 嘿嘿,长假最后一天!摸鱼一把,我用Python做一个美女消消乐!
  10. getStyle(getComputedStyle currentstyle) 获取非行间样式函数封装
  11. 驭龙HIDS的简介,它开源了
  12. MuMu模拟器开发者文档
  13. Android Studio配置gradle时或导入别人项目时提示Could not find com.android.tools.build:gradle
  14. URLEncoder.encode(String url)和URLDecoder.decode(String url)
  15. 美国一男子起诉苹果:称 iPhone 6 电池存在缺陷导致爆炸
  16. 二刷剑指Offer:剑指Offer+LeetCode(全53题)
  17. DSP6678 RapidIO基本原理之一
  18. Django Template 网页模板(五)
  19. 【第3版emWin教程】第3章 emWin介绍
  20. 帝国理工计算机科学硕士学费,去帝国理工学院读研需要几年?一年学费是多少?语言要求都有哪些?...

热门文章

  1. JAVA Metrics 度量工具使用介绍1
  2. ios 简单的计时器游戏 NSUserDefaults NSDate NSTimer
  3. 选择FreeBSD的理由?欢迎新人观看^_^
  4. 重温Android——调节屏幕亮度
  5. git 创建webpack项目_近期总结:手动搭建react项目,将项目从自己的库引入到新的项目中使用...
  6. 自定义一个ImageSwitcher
  7. The operation cannot be completed. See the details.
  8. hibernate级联删除问题
  9. 【HASH】【UVA 10125】 Sumset
  10. http 性能测试 wrk使用教程