tyvj P1117 拯救ice-cream
2010-11-02 19:45
369 查看
背景 Background
天好热……Tina顶着那炎炎的烈日,向Ice-cream home走去……
可是……停电了……
冰淇淋们躺在Ice-cream home的冰柜里,慢慢地……慢慢地……融化…………
你说,她能赶在冰淇淋融化完之前赶到Ice-cream home去吗?
描述 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
分析:一个二维的宽搜题目………………
program p1117; const dx:array[1..4]of integer=(1,-1,0,0); dy:array[1..4]of integer=(0,0,-1,1); var b:array[0..10000]of record x,y:longint; end; f:array[0..30,0..30]of longint; a:array[0..30,0..30]of char; time,n,m,x1,y1,x2,y2:longint; procedure init; var i,j:longint; begin readln(time); readln(n); readln(m); fillchar(a,sizeof(a),'$'); filldword(f,sizeof(f)div 4,maxlongint); for i:=1 to m do //一开始写的是for i:=1 to n do ^^^^^ for j:=1 to m do 导致结果错误,囧…… begin for j:=1 to n do begin read(a[i,j]); if a[i,j]='s' then begin x1:=i; y1:=j; end; if a[i,j]='m' then begin x2:=i; y2:=j; end; end; readln; end; end; procedure bfs; var i,j,head,tail:longint; begin head:=1; tail:=1; f[x1,y1]:=0; b[head].x:=x1; b[head].y:=y1; while head<=tail do begin for i:=1 to 4 do begin if (a[b[head].x+dx[i],b[head].y+dy[i]]='.') or(a[b[head].x+dx[i],b[head].y+dy[i]]='m') then if f[b[head].x+dx[i],b[head].y+dy[i]]>f[b[head].x,b[head].y]+1 then begin f[b[head].x+dx[i],b[head].y+dy[i]]:=f[b[head].x,b[head].y]+1; inc(tail); b[tail].x:=b[head].x+dx[i]; b[tail].y:=b[head].y+dy[i]; end; if (a[b[head].x+dx[i],b[head].y+dy[i]]='#') then if (f[b[head].x+dx[i],b[head].y+dy[i]]>f[b[head].x,b[head].y]+2) then begin f[b[head].x+dx[i],b[head].y+dy[i]]:=f[b[head].x,b[head].y]+2; inc(tail); b[tail].x:=b[head].x+dx[i]; b[tail].y:=b[head].y+dy[i]; end; end; inc(head); end; end; begin init; bfs; writeln(f[x2,y2]); end.
相关文章推荐
- 拯救ice-cream
- P1117 拯救ice-cream tyvj
- tyvj1117 拯救ice-cream
- 【搜索】拯救ice-cream
- tyvj1117拯救ice-cream&&nyoj284坦克大战
- TYVJ 1117 拯救ice-cream 解题报告
- 拯救ice-cream(Vijos p1340)
- 分糖果 && 拯救ice-cream(tyvj 1083 && 1117)
- 深度优先搜索之拯救ice-cream
- vijos p1340(拯救ice-cream)
- 拯救ice-cream(广搜+优先级队列)
- |Tyvj|BFS|P1117 拯救ice-cream
- gym101194 china final Problem D. Ice Cream Tower(二分)
- Android 9.0 “Pistachio Ice Cream”新功能和特性
- Icy ice cream delivery
- Comparing Ice Cream Sandwich with iOS 5
- Ice Cream Sandwich 中使用私有 API 修改 WiFi 代理服务器设置
- Ice_cream’s world III hdu 2122 最小生成树
- 【并查集判环】hdu 2120 Ice_cream's world I
- HDU 2120 Ice_cream's world I