【搜索】拯救ice-cream
2012-05-25 12:15
309 查看
描述 Description
给你一张坐标图,s为Tina的初始位置,m为Ice-cream home的位置,‘.’为路面,Tina在上面,每单位时间可以移动一格;‘#’为草地,Tina在上面,每两单位时间可以移动一格(建议不要模仿—毕竟Tina还小);‘o’是障碍物,Tina不能在它上面行动。也就是说,Tina只能在路面或草地上行走,必须绕过障碍物,并到达冰淇淋店。但是…………不保证到达时,冰淇淋还未融化,所以……就请聪明的你……选择最佳的方案啦…………如果,Tina到的时候,冰淇淋已经融化完了,那她可是会哭的。
输入格式 Input Format
依次输入冰淇淋的融化时间t(0<t<1000),坐标图的长x,宽y(5<=x,y<=25){太长打起来好累……},和整张坐标图。
输出格式 Output Format
判断按照最优方案是否可以赶在冰淇淋融化之前到达冰淇淋店(注:当T=最优方案所用时间,则判断为未赶到),如赶到,输出所用时间;如未赶到,输出Tina的哭声——“55555”(不包括引号)。
样例输入 Sample Input
11
10
8
......s...
..........
#ooooooo.o
#.........
#.........
#.........
#.....m...
#.........
样例输出 Sample Output
10
时间限制 Time Limitation
各个测试点1s
宽搜,拆点,草地拆成两个点。
给你一张坐标图,s为Tina的初始位置,m为Ice-cream home的位置,‘.’为路面,Tina在上面,每单位时间可以移动一格;‘#’为草地,Tina在上面,每两单位时间可以移动一格(建议不要模仿—毕竟Tina还小);‘o’是障碍物,Tina不能在它上面行动。也就是说,Tina只能在路面或草地上行走,必须绕过障碍物,并到达冰淇淋店。但是…………不保证到达时,冰淇淋还未融化,所以……就请聪明的你……选择最佳的方案啦…………如果,Tina到的时候,冰淇淋已经融化完了,那她可是会哭的。
输入格式 Input Format
依次输入冰淇淋的融化时间t(0<t<1000),坐标图的长x,宽y(5<=x,y<=25){太长打起来好累……},和整张坐标图。
输出格式 Output Format
判断按照最优方案是否可以赶在冰淇淋融化之前到达冰淇淋店(注:当T=最优方案所用时间,则判断为未赶到),如赶到,输出所用时间;如未赶到,输出Tina的哭声——“55555”(不包括引号)。
样例输入 Sample Input
11
10
8
......s...
..........
#ooooooo.o
#.........
#.........
#.........
#.....m...
#.........
样例输出 Sample Output
10
时间限制 Time Limitation
各个测试点1s
宽搜,拆点,草地拆成两个点。
#include <cstdio> #include <string> long que[1000000]; long tim[1000000]; char map[1000000]; #define MOVE(a,b) (b==0?(a-(m+1)):(b==1?(a+(m+1)):(b==2?(a-1):(a+1)))) long S,M; long t,m,n; long getint() { long rs=0;char tmp;bool sgn=1; do tmp = getchar(); while (!isdigit(tmp)&&tmp-'-'); if (tmp=='-'){sgn=0;tmp=getchar();} do rs=(rs<<3)+(rs<<1)+tmp-'0'; while (isdigit(tmp=getchar())); return sgn?rs:-rs; } int main() { freopen("icecream.in","r",stdin); freopen("icecream.out","w",stdout); scanf("%ld%ld%ld",&t,&m,&n); for (long i=1;i<n+1;i++) { getchar(); for (long j=1;j<m+1;j++) { map[i*(m+1)+(j)] = getchar(); if (map[i*(m+1)+(j)] == 's') S = i*(m+1)+(j); if (map[i*(m+1)+(j)] == 'm') { map[i*(m+1)+(j)] = '.'; M = i*(m+1)+(j); } if (map[i*(m+1)+(j)] == 'o') map[i*(m+1)+(j)] = 0; } } long edge = n*(m+1)+(m+1); long l = 0; long r = 0; que[++r] = S; map[S] = 0; tim[r] = 0; while (l < r) { long u = que[++l]; if (u == M) { if (tim[l] < t) { printf("%ld",tim[l]); return 0; } else { break; } } if (u > edge) { que[++r] = u-edge; map[u-edge] = 0; tim[r] = tim[l] + 1; } else { for (long d=0;d<4;d++) { long v = MOVE(u,d); if (map[v] > 0) { if (map[v] == '#') { que[++r] = v+edge; tim[r] = tim[l] + 1; } if (map[v] == '.') { que[++r] = v; map[v] = 0; tim[r] = tim[l] + 1; } } } } } printf("55555"); return 0; }
相关文章推荐
- 深度优先搜索之拯救ice-cream
- tyvj P1117 拯救ice-cream
- tyvj1117 拯救ice-cream
- 分糖果 && 拯救ice-cream(tyvj 1083 && 1117)
- 拯救ice-cream(Vijos p1340)
- 拯救ice-cream
- vijos p1340(拯救ice-cream)
- TYVJ 1117 拯救ice-cream 解题报告
- P1117 拯救ice-cream tyvj
- 拯救ice-cream(广搜+优先级队列)
- |Tyvj|BFS|P1117 拯救ice-cream
- tyvj1117拯救ice-cream&&nyoj284坦克大战
- HDU 2122 Ice_cream’s world III【最小生成树】
- 杭电 最小生成树 2122 Ice_cream’s world III
- 最小生成树 Prim 算法HDU 2122 Ice_cream’s world III
- Android 9.0 “Pistachio Ice Cream”新功能和特性
- 文章标题 HDU 2122: Ice_cream’s world III (最小生成树+kruskal)
- Icy ice cream delivery
- HDU 2120 Ice_cream's world I 基础并查集★
- ICE CAVE(BFS搜索(模拟))