3506: An escape 分享至QQ空间 去爱问答提问或回答

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte

总提交: 228            测试通过:75

描述

You are now in a maze. You mark all the blocks you've visited by '@', so when you see a wall '#' or a visited block '@' in front of you, you will make a right turn. Otherwise, that means you don't have a wall or a visited block in front, you'll go forward. When you reach the door 'D', congratulations!

####

#Y@#

##D#

####

Look at the maze above, you are now in 'Y', facing left, and seeing a wall in front of you. You turn right, a wall again; turn right again, visited block; turn right once again, still a wall. After three continuous turnings, you realize the rest time of your life will be making turnings.

输入

The first line is T(T<=20), then T cases follow.

Each case has two numbers n and m(4<=n,m <= 20), the boundary of the maze will always be '#', in the maze, there will be exactly one 'Y', one 'D'. Normal blocks are marked with '.'.

At first you are facing left.

输出

"YES" if you can go out of the maze(reach 'D'). "NO" otherwise.

样例输入

2

4 4

####

#.Y#

##D#

####

4 4

####

#.Y#

#D##

####

样例输出

NO

YES

解题思路:

每走到一个位置(当然这个位置不是终点),就先判断一下它的上下左右是不是全不可以走,如果是这样的话,则这个人直接GG,程序结束,它逃不出迷宫。有一个数dir代表方向,初始dir的值为1,代表朝向左,如果遇到墙,d要进行向右转,则dir++,因此如果dir%4=1,代表朝向左,如果dir%4==2,代表朝向上,如果dir%4=3,代表朝向右边,如果dir%4==0,则代表朝向下方,如果一个点有能走的地方,我们就让它当前的朝向走,如果走不了,就转弯,重复判断或转向,具体思路见代码。

#include<iostream>
#include<stdio.h>
#include<string.h>using namespace std;int m,n;///m列,n行
int sx,sy;///起点
int dir;///代表方向
char Map[25][25];///迷宫地图
int life(int x,int y)///用于判断某点(x,y)上下左右是否无路可走的函数
{if(Map[x-1][y]=='.'||Map[x-1][y]=='D')///该点的上方可走return 1;///返回1,代表有可以走的地方if(Map[x][y+1]=='.'||Map[x][y+1]=='D')///该点的右方可走return 1;///返回1,代表有可以走的地方if(Map[x+1][y]=='.'||Map[x+1][y]=='D')///该点的下方可走return 1;///返回1,代表有可以走的地方if(Map[x][y-1]=='.'||Map[x][y-1]=='D')///该点的左方可走return 1;///返回1,代表有可以走的地方return 0;///代表上下左右四个方向,全都不通,则逃不出迷宫
}
int live()///判断是否能活着出去的函数,如果可以返回1,不能返回0
{int tx,ty;tx = sx;ty = sy;while(life(tx,ty))///四周有可以走的地方,就让它走{Map[tx][ty] = '#';///走过的地方直接标记为'#',则以后这一点都不可走了if(dir%4 == 1)///代表朝向左方{int dx = tx;///横坐标减1int dy = ty-1;if(dx>=1&&dx<=n&&dy>=1&&dy<=m)///不出届{if(Map[dx][dy]=='.'||Map[dx][dy]=='D')///这一点可以走{if(Map[dx][dy]=='.')///可以走,更新tx,ty{tx = dx; ty = dy;}if(Map[dx][dy]=='D')///是终点,结束函数,返回1return 1;}else  dir++;}}else if(dir%4==2)///代表方向朝上{int dx = tx-1;int dy = ty;if(dx>=1&&dx<=n&&dy>=1&&dy<=m){if(Map[dx][dy]=='.'||Map[dx][dy]=='D'){if(Map[dx][dy]=='.'){tx = dx; ty = dy;}if(Map[dx][dy]=='D')return 1;}else  dir++;}}else if(dir%4==3)///朝右边{int dx = tx;int dy = ty + 1;if(dx>=1&&dx<=n&&dy>=1&&dy<=m){if(Map[dx][dy]=='.'||Map[dx][dy]=='D'){if(Map[dx][dy]=='.'){tx = dx; ty = dy;}if(Map[dx][dy]=='D')return 1;}else  dir++;}}else if(dir%4==0)///代表朝下边{int dx = tx + 1;int dy = ty;if(dx>=1&&dx<=n&&dy>=1&&dy<=m){if(Map[dx][dy]=='.'||Map[dx][dy]=='D'){if(Map[dx][dy]=='.'){tx = dx; ty = dy;}if(Map[dx][dy]=='D')return 1;}else  dir++;}}}return 0;
}
int main()
{int T,i,j;///T组测试数据scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);///假如为行,列顺序dir = 1;///代表初始朝向左边memset(Map,'#',sizeof(Map));for(i = 1; i <= n; i++)for(j = 1; j <=m; j++){scanf(" %c",&Map[i][j]);if(Map[i][j] == 'Y'){sx = i;sy = j;}}int ans = live();if(ans == 1)printf("YES\n");elseprintf("NO\n");}
}

台州学院ACM:2506 An escape相关推荐

  1. 台州学院ACM:1748: Dungeon Master

    1748: Dungeon Master 时间限制(普通/Java):1000MS/10000MS     内存限制:65536KByte 总提交: 212            测试通过:125 描 ...

  2. 台州学院ACM:3582 图书馆查询系统

    3582: 图书馆查询系统 Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte Total Submit: 779    ...

  3. 2014台州学院ACM集训队寒假练习赛2

    A Treasure Chest 博弈dp 以前做过差不多的 然后就写了 超内存了 自己写的是记忆化搜索 可以学一下大白书的67页例题28以及2013 ACM-ICPC吉林通化全国邀请赛play ga ...

  4. 台州学院ACM集训队月赛(元旦场)

    比赛地址戳这里 1001 : 数学题: 求极限: 1002 : maomeng的成就 题解: 对于某一个物品i,我们可以选择他的第一个成就,或者选择第二个成就,又或者不选,这样我们就可以使用dfs,来 ...

  5. 台州学院acm:3128 简单版贪吃蛇

    3128: 简单版贪吃蛇  时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte 总提交: 545            测试通过:169 Special J ...

  6. 台州学院acm:Crashing Robots

    描述 In a modernized warehouse, robots are used to fetch the goods. Careful planning is needed to ensu ...

  7. 2014台州学院ACM集训队寒假练习赛1

    A Bridge 只想到一种情况 另外一种情况是参考别人的 2个人为一轮 a b c d a b 去 a 回 c d 去 b 回(最小的2个去 2个在回来 ...) 其实还有一种 a b 去 a 回 ...

  8. 台州学院acm:1005 Hero In Maze

    1005: Hero In Maze   时间限制(普通/Java):1000MS/10000MS     内存限制:65536KByte 总提交: 3881            测试通过:979 ...

  9. 程序设计竞赛资源索引

    如果想提高编程能力,最重要的就是多练多学,现在网络上提供了大量的习题库,可以很方便的练习编程. ACM/ICPC题库(支持c,c++,java,pascal): 台州学院acm :有不少习题使用中文描 ...

最新文章

  1. AAAI 2020| 一文看尽腾讯优图10篇入选论文
  2. UVA 10795 新汉诺塔问题
  3. Java NIO之通道
  4. mysql报表占容量_MariaDB(MySQL)修改表结构报表空间满
  5. PS教程第二课:PS安装
  6. centos配置java环境变量_【开发笔记】-CentOS配置Java环境变量
  7. Boost Log : Setting up sinks
  8. Mesos和Docker的集成
  9. 向真正Java高手请教ant构建工具的类装载器问题
  10. java oracle spool,oracle之spool详细使用总结
  11. 安卓微信本地数据库解密与删除聊天记录恢复 EnMicroMsg.db FTS5IndexMicroMsg_encrypt.db
  12. eclipse中文语言包在线安装方法
  13. Windows 7版本IE10浏览器11月中旬推出
  14. yolov 论文发表在什么期刊上_joe期刊是什么期刊_joe是什么意思_joe牌子
  15. 分布式系统中的CAP理论
  16. 数据科学数据分析_使用数据科学进行营销分析
  17. TLS Lab(Transport Layer Security Lab,SEED实验)基于PKI实验内容进行中间人攻击实验
  18. 关于不能访问腾讯云服务器tomcat的问题解决
  19. 超文本传输协议版本 2 [http/2 spec]
  20. ORB_SLAM2新增稠密建图代码笔记

热门文章

  1. 2020考研大纲词汇TXT版本5500
  2. IIS服务器下如何配置php
  3. kafka启动Initial heap size set to a larger value than the maximum heap size报错(windows系统)
  4. 服务器国产自研芯片,国产自研芯片新时代 龙芯A4000评测
  5. Unity:实现UI上下翻动效果
  6. 论文笔记 ACL 2021|Low-resource Event Detection with Ontology Embedding
  7. Ubuntu下使用QQ
  8. android x86 win8平板,如何设置win8及android x86平板板及注意事项
  9. 怪哉 G o o g l e 不提供 Gizmo5 Linux 客戶端下載
  10. 华为开源自研AI框架昇思MindSpore应用案例:Colorization自动着色