pastebin

Paste Search Dynamic
Recent pastes
ans
  1. def f2(x,y,t)
  2.         return if x<0 || $w<=x || y<0 || $h<=y
  3.         return if $ms[y][x]=="#"
  4.         $qs.unshift([y,x,t])
  5. end
  6. def f(x,y,t)
  7.         return if x<0 || $w<=x || y<0 || $h<=y
  8.         return if $ms[y][x]=="#"
  9.         $qs.push([y,x,t])
  10. end
  11. $h,$w=gets.split(" ").map{|e| e.to_i}
  12. $ms=[]
  13. $qs=[]
  14. hs={}
  15. hs["R"]=[0,1]
  16. hs["U"]=[-1,0]
  17. hs["L"]=[0,-1]
  18. hs["D"]=[1,0]
  19.  
  20.  
  21. $h.times{|y|
  22.         a=gets.chomp
  23.         x=0
  24.         a.each_char{|e|
  25.                 if e=="S" then
  26.                         $qs<<[y,x,0]
  27.                 end
  28.                 x+=1
  29.         }
  30.         $ms<<a
  31. }
  32. goal=false
  33. e=[]
  34. ans=-1
  35. while $qs.size>0 do
  36.         e=$qs.shift
  37.         t=$ms[e[0]][e[1]]
  38.         if t=="G" then
  39.                 ans=e[2] if ans==-1 || e[2]<ans
  40.                 next
  41.         end
  42.         if t=="#" then
  43.                 next
  44.         end
  45.         $ms[e[0]][e[1]]="#"
  46.         x0=e[1]
  47.         y0=e[0]
  48.         t0=e[2]
  49.         if t=="." || t=="S" then
  50.                 f(x0+1,y0,t0+1)
  51.                 f(x0,y0+1,t0+1)
  52.                 f(x0-1,y0,t0+1)
  53.                 f(x0,y0-1,t0+1)
  54.         else
  55.                 e2=hs[t]
  56.                 f2(x0+e2[1],y0+e2[0],t0)
  57.         end
  58. end
  59. puts ans
Parsed in 0.019 seconds