hdoj--2579--Dating with girls(2)(搜索+三维标记)
2015-11-01 20:39
411 查看
Dating with girls(2)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2691 Accepted Submission(s): 752
[align=left]Problem Description[/align]
If you have solved the problem Dating with girls(1).I think you can solve this problem too.This problem is also about dating with girls. Now you are in a maze and the girl you want to date with is also in the maze.If you can find
the girl, then you can date with the girl.Else the girl will date with other boys. What a pity!
The Maze is very strange. There are many stones in the maze. The stone will disappear at time t if t is a multiple of k(2<= k <= 10), on the other time , stones will be still there.
There are only ‘.’ or ‘#’, ’Y’, ’G’ on the map of the maze. ’.’ indicates the blank which you can move on, ‘#’ indicates stones. ’Y’ indicates the your location. ‘G’ indicates the girl's location . There is only one ‘Y’ and one ‘G’. Every seconds you can move
left, right, up or down.
[align=left]Input[/align]
The first line contain an integer T. Then T cases followed. Each case begins with three integers r and c (1 <= r , c <= 100), and k(2 <=k <= 10).
The next r line is the map’s description.
[align=left]Output[/align]
For each cases, if you can find the girl, output the least time in seconds, else output "Please give me another chance!".
[align=left]Sample Input[/align]
1 6 6 2 ...Y.. ...#.. .#.... ...#.. ...#.. ..#G#.
[align=left]Sample Output[/align]
7
[align=left]Source[/align]
HDU 2009-5 Programming Contest
#include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; //三维标记 ,当前的时间与t取余,到达"#"的时间只有t种, //如果这几种都不行,那这条路就废了 char map[110][110]; int a[110][110][12]; int m,n,t; int sx,sy; int dx[4]={1,0,0,-1}; int dy[4]={0,1,-1,0}; struct node { int x,y,step; friend bool operator < (node s1 ,node s2) { return s1.step>s2.step; } }p,temp; void bfs() { memset(a,0,sizeof(a)); queue<node>q; p.x=sx,p.y=sy; p.step=0; q.push(p); a[sx][sy][0]=1; while(!q.empty()) { p=q.front(); q.pop(); if(map[p.x][p.y]=='G') { printf("%d\n",p.step); return ; } for(int i=0;i<4;i++) { temp.x=p.x+dx[i]; temp.y=p.y+dy[i]; temp.step=p.step+1; int d=temp.step%t; if(temp.x<0||temp.x>=n||temp.y<0||temp.y>=m||a[temp.x][temp.y][d]) continue; a[temp.x][temp.y][d]=1; if(map[temp.x][temp.y]=='#'&&d) continue; q.push(temp); } } printf("Please give me another chance!\n"); } int main() { int s; scanf("%d",&s); while(s--) { scanf("%d%d%d",&n,&m,&t); for(int i=0;i<n;i++) { scanf("%s",map[i]); for(int j=0;j<m;j++) { if(map[i][j]=='Y') sx=i,sy=j; } } bfs(); } return 0; }
相关文章推荐
- HDU 5524 Subtrees [想法题/LCA]
- linux yum怎么安装 及过程
- Mangos源码分析(1):服务器结构探讨之最简单的结构
- mysql事务的提交和回滚
- Activity的启动模式与startActivityForResult的关系
- HDOJ 题目 1300 Pearls(DP水)
- diy toy: image auto-handler
- Java抽象类与接口的区别
- 《CLR via C#》---枚举标志和标志位
- 【cocos2d-x3.2游戏开发】 lua 类, 继承, 面向对象
- 【2015/11/1】C学习日志_Day11&12 数据类型 指针 内存对齐 函数指针
- LeJOS学习(8):Sensor的API研究-InfraRedSensor
- 用数组取指定模式地址的内容
- 程序47 读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。
- android 读取联系人实例
- 接口层输入
- week9---11月4日 JS基础(二)
- Meteor错误:TypeError: Meteor.userId is not a function
- ACM学习历程—HDU1041 Computer Transformation(递推 && 大数)
- MFC程序内存泄露检查