nyoj1129 Salvation
来源:互联网 发布:矩阵的行列式的性质 编辑:程序博客网 时间:2024/06/01 09:57
Salvation
- 描述
神秘瀑布镇是一个神秘的地方,那里有吸血鬼,狼人,巫师,二重身。 Klaus(吸血鬼祖先) 为了利用 Elena 的血液发展他的混血大军(吸血鬼&狼人),也来到了神秘瀑布镇。Stefan 因为深爱着 Elena ,于是 Stefan 决定去唤醒吸血鬼猎人,来解救 Elena 。
吸血鬼猎人被封锁在一个迷宫里,这个迷宫有一种特性,只要进入就会失去方向感。于是 Stefan 想到一种方法,以左为标准(即优先左走),其次向前,向右,如果都无法走就向后走(即向右转两次)。他可以向上下左右四个方向的空格移动一个格,每次耗费1分钟。Stefan 在得知你是一个有天赋的程序员后,决定让你判断他是否能找到吸血鬼猎人。
- 输入
- 输入包含多组测试数据,第一行输入 n , m ( 2 < n ,m <= 100) ,接下来n行每行m个字符,第 n + 2 行一个字符表示初始方向(E W S N)。
“.”代表空格 ,“#”代表墙 , “ T ”代表初始位置,“X”代表吸血鬼猎人的位置。 - 输出
- 输出一行,如果能找到输出“YES”,否则输出“NO”。
- 样例输入
4 4.....##..##.TX..N4 4.....##..###T#.XN
- 样例输出
YESNO
- 提示
优先左走即:如果左边能走就向左走,如果不能走向前走,如果前不能走,向右走,如果右不能走向后走。
哈哈~先说说为什么看上这道题目了,因为我喜欢看吸血鬼日记,虽然越到后面批判的声音越多,但是还是希望看下去。另外爱上了初代。。哈哈。。所以看见了有关吸血鬼的题目果断想要做掉它~ ps:I love Damon and Klaus!!!
一看是看题目的时候果断的热情和自以为是让我赤裸裸的理解错了题目的意思,我以为只要能够找到最短的路径的情况下就一定可以找到最后的hunter,所以华丽丽的wa~
给出一组数据~~
5 5
. . . . .
.###.
.###.
.#X#.
T. . . .
这样的情况下就会一直向左走所以也就是找不到的~
另外,最后的方向也就是代码的精髓所在,表示我把每个方向的标记方向都列了出来,自认为很直观,还被嘲笑了。。。(渣渣的世界大神不懂)
但是还是勇敢的放出来~~
int flagN[4][2] = {{0, -1}, {1, 0}, {0, 1}, {-1, 0}};int flagE[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};int flagS[4][2] = {{0, 1}, {-1, 0}, {0, -1}, {1, 0}};int flagW[4][2] = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};
就是四个方向不同的左前右后~想当初理解这个都费了点劲。。。讨论区的代码就用这个好好的理解精髓之后刷过去了~带上原博客的链接 http://blog.csdn.net/u014225783/article/details/40746279
#include<stdio.h>#include<string.h>int Dx,Dy,m,n;char a[101][101];int dx[]={-1,0,1,0};int dy[]={0,-1,0,1};int key;int vis[101][101];bool judge(int x,int y){ if(x<0||x>=n||y<0||y>=m||a[x][y]=='#') return false; return true;}void dfs(int DS,int x,int y){ if(key) return ; printf("%d %d %d\n",x,y,DS); for(int i=1;i>-3;i--) { int ds=(DS+i+8)%4; //改变顺序的精髓。。 printf("%d\n", ds); int xx=x+dx[ds]; int yy=y+dy[ds]; if(judge(xx,yy)) //判断该节点是否可以走,如果可以就向下,进行下一步递归,不可以就向下一个方向 { if(xx==Dx&&yy==Dy) { key=1; return ; } if(vis[xx][yy]==4) return ; vis[xx][yy]++; dfs(ds,xx,yy); return ; } } return ;}int main(){ int sx,sy; while(scanf("%d %d",&n,&m)!=EOF) { for(int i=0; i<n; i++) { scanf("%s",a[i]); for(int j=0; j<m; j++) { if(a[i][j]=='T') sx=i,sy=j; else if(a[i][j]=='X') Dx=i,Dy=j; } } char sd[10]; scanf("%s",sd); int DS; if(sd[0]=='N') DS=0; else if(sd[0]=='W') DS=1; else if(sd[0]=='S') DS=2; else DS=3; key=0; memset(vis,0,sizeof(vis)); vis[sx][sy]=1; dfs(DS,sx,sy); if(key) puts("YES"); else puts("NO"); }}
- nyoj1129 Salvation
- nyoj1129 Salvation dfs
- Salvation
- Salvation
- 深搜-Salvation
- NYOJ1129-很新颖的DFS
- Salvation nyoj 1129
- nyoj 1129 Salvation 模拟
- Salvation(dfs)
- NYOJ 1129 Salvation (DFS)
- NYOJ题目1129 Salvation(dfs,技巧)
- NYOJ 1129 Salvation(技巧型深搜)
- NYOJ 1129 Salvation(dfs+调方向技巧)
- nyoj 1129 Salvation(判断方向+判断走向)
- Viewpager下带来的问题:SlidingMenu与ChildViewPager
- Discriminatively Trained Partbased Models (DPM) 理解
- ios应用增加给appstore评分和进入app安装页面代码功能
- “syntax error near unexpected token `then'”错误
- ecilipse怎样设置默认保存路径
- nyoj1129 Salvation
- 多个插件共享同一进程的问题
- Java String与byte[]的相互转换
- android 4.4 电池电量管理底层分析(C\C++层)
- java IO流
- UVA - 458 The Decoder
- Java RMI 的简单示例
- 从一个实例来认识GDB与高效调试
- 淘宝TFS使用