题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1728

题意:走迷宫,找最小的拐角

题解:对BFS有了新的理解,DFS+剪枝应该也能过,用BFS就要以拐角作为增量来搜,即以当前点为坐标,4个方向都搜一次,下一次出队,step就要加1

 1 #include<cstdio>
 2 #include<queue>
 3 #include<cstring>
 4 using namespace std;
 5 #define FFC(i,a,b) for(int i=a;i<=b;i++)
 6 int t,m,n,xs,xe,ys,ye,k,dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
 7 struct dt{int x,y,t;};
 8 char g[101][101];bool v[101][101];
 9 bool check(int x,int y){
10     if(x>n||x<1||y>m||y<1||g[x][y]=='*')return 0;
11     return 1;
12 }
13 bool fuck(){
14     memset(v,0,sizeof(v));
15     dt st,o;st.x=xs,st.y=ys,st.t=-1;
16     v[xs][ys]=1;
17     queue<dt>Q;Q.push(st);
18     while(!Q.empty()){
19         o=Q.front();Q.pop();
20         if(o.x==xe&&o.y==ye&&o.t<=k)return 1;
21         o.t++;
22         for(int i=0;i<4;i++){
23             int xx=o.x+dir[i][0],yy=o.y+dir[i][1];
24             while(check(xx,yy)){
25                 if(!v[xx][yy]){st.x=xx,st.y=yy,st.t=o.t,v[xx][yy]=1;Q.push(st);}
26                 xx+=dir[i][0],yy+=dir[i][1];
27             }
28         }
29     }
30     return 0;
31 }
32 int main(){
33     int t;
34     scanf("%d",&t);
35     while(t--){
36         scanf("%d%d",&n,&m);
37         FFC(i,1,n){
38             getchar();
39             FFC(j,1,m)scanf("%c",&g[i][j]);
40         }
41         scanf("%d%d%d%d%d",&k,&ys,&xs,&ye,&xe);
42         if(fuck())puts("yes");
43         else puts("no");
44
45     }
46     return 0;
47 }

View Code

转载于:https://www.cnblogs.com/bin-gege/p/5696167.html

hdu_1728_逃离迷宫(bfs)相关推荐

  1. hdu 1728 逃离迷宫 (bfs)

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

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

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

  3. 逃离迷宫 ( BFS /DFS)

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

  4. hdoj 1728 逃离迷宫

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

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

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

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

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

  7. 郑厂长系列故事——逃离迷宫(C语言)

    郑厂长没变 还是那个假厂长真码农改变的是业余爱好 他现在不研究象棋,改玩游戏了! 最近,郑厂长爱上了逃离迷宫这个游戏,他日日夜夜的玩,就是想达到自己的目标:1000万,因为这个数字和他在腾讯的年收入一 ...

  8. 杭电4524-郑厂长系列故事——逃离迷宫

    郑厂长系列故事--逃离迷宫 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  9. 献给阿尔吉侬的花束(二刷,迷宫bfs,模板题)

    文章目录 Question Ideas Code Question 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终 ...

最新文章

  1. find中的-print0和xargs中-0的奥妙
  2. 计算机网络按信号频带占用方式分为,《计算机网络及组网技术》第2阶段测试题....
  3. Love2D游戏引擎制作贪吃蛇游戏
  4. ANN:DNN结构演进History—LSTM网络
  5. 面试--输入一堆随机数(0-1000),这里面会有重复的数字,把他们去除掉。然后由大到小排列。
  6. Codis 分布式缓存部署
  7. Java I/O 扩展
  8. 青岛大学计算机科学技术学院官网,田呈亮 - 青岛大学 - 计算机科学技术学院
  9. uniapp 分享缩略图过大怎么办_经验分享| 反击破转子断裂的应急处理方法
  10. 如何自定义苹果Mac睡眠时间,掌握作息?
  11. struts1.x 标签库
  12. 999999数码管显示c语言,定时器1中断动态刷新从999999~0倒计时,数码管只显示有效位的C语言程序怎么编?...
  13. 如何快速进行十进制二进制转换
  14. 利用C语言编程输出小写英文字母表的大写形式(以5为间隔)
  15. 吞食天地2忘云殇8.77图文攻略
  16. 5款高效率,但是名气不大的小众软件
  17. ESR-CMDS参数含义
  18. 斯巴达300勇士 中英文对照
  19. Python中带“symmetric_”前缀的方法的特点
  20. 为什么你需要辞职了?——辞职的十大理由

热门文章

  1. 学习mysql中使用inner join,left join 等
  2. linux原理 培训,Linux容器技术原理和使用
  3. 程序人生:教你写出让同事抓狂的代码
  4. 生产三码 黑苹果_黑苹果OC配置工具:OpenCore Configurator v2.15.2.0
  5. cserialport 循环发送信号_C++信号处理
  6. mysql实用管理器添加外键_MySQL 添加外键
  7. linux进程---exec族函数(execl, execlp, execv, execvp, )解释和配合fork的使用
  8. nginx php7提速,nginx+php7-fpm 性能提升几倍跟踪实践结果并优化
  9. ai中导入sketch_在Sketch中营造深度感
  10. JavaScript 断点调试技巧