@w,@h = gets.split.map(&:to_i) @data = STDIN.map(&:chomp).join('').split('') def sol now,d,f,memo tmp = 0 if @data[now] == '.' if f == 1 return 0 end else tmp = f = 1 end ans = 10000 memo[now] = true if d != 'S' && now < @w && !memo[now - @w] ans = [ans,sol(now - @w,'N',f,memo) + tmp].min end if d != 'N' && now / @w != @h - 1 && !memo[now + @w] ans = [ans,sol(now + @w,'S',f,memo) + tmp].min end if d != 'E' && now % @w != 0 && !memo[now - 1] ans = [ans,sol(now - 1,'W',f,memo) + tmp].min end if d != 'W' && now % @w != @w - 1 && !memo[now + 1] ans = [ans,sol(now + 1,'E',f,memo) + tmp].min end return ans end memo = Array.new(@w * @h,false) p sol(@data.index('.'),'',0,memo)