Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Coord
- def initialize(x, y)
- @x = x
- @y = y
- end
- def equals(other)
- return @x == other.x && @y == other.y
- end
- def x
- return @x
- end
- def y
- return @y
- end
- end
- class Cell
- def initialize(pos, prev, solid)
- @pos = pos
- @prev = prev
- @solid = solid
- @visited = false
- @path = false
- end
- def pos
- return @pos
- end
- def prev
- return @prev
- end
- def setPrev(newPos)
- @prev = newPos
- end
- def solid
- return @solid
- end
- def visited
- return @visited
- end
- def visit
- @visited = true
- end
- def addToPath
- @path = true
- end
- def path
- return @path
- end
- def to_c
- if solid
- return "#"
- elsif path
- return "*"
- else
- return " "
- end
- end
- end
- var = gets.split(" ")
- width = var[0].to_i-1
- height = var[1].to_i-1
- maze = Array.new
- for x in 0..width
- maze[x] = Array.new
- end
- for y in 0..height
- s = gets
- for x in 0..width
- pos = Coord.new(x, y)
- case s[x]
- when "#"
- maze[x][y] = Cell.new(pos, nil, true)
- when "S"
- start = pos
- maze[x][y] = Cell.new(pos, nil, false)
- when "E"
- stop = pos
- maze[x][y] = Cell.new(pos, nil, false)
- else
- maze[x][y] = Cell.new(pos, nil, false)
- end
- end
- end
- front = Array.new
- front.push(maze[start.x][start.y])
- while true
- if front.length == 0
- puts "No path found!"
- exit 1
- end
- point = front.pop
- if point.pos.equals(stop)
- break
- end
- for x in -1..1
- for y in -1..1
- if x == 0 or y == 0
- pX = point.pos.x+x
- pY = point.pos.y+y
- if pX < 0 or pY < 0 or pX > width or pY > height
- next
- end
- p = maze[pX][pY]
- if !p.visited && !p.solid
- p.visit
- p.setPrev(point.pos)
- front.push(p)
- end
- end
- end
- end
- end
- while !point.pos.equals(start)
- point.addToPath
- prev = point.prev
- point = maze[prev.x][prev.y]
- end
- for y in 0..height
- for x in 0..width
- point = maze[x][y]
- if point.pos.equals(start)
- print "S"
- elsif point.pos.equals(stop)
- print "E"
- else
- print point.to_c
- end
- end
- puts ""
- end
Advertisement
Add Comment
Please, Sign In to add comment