Skip to content

Commit 0b9728e

Browse files
committed
bfs shortest reach problem from hackerrank.
1 parent a429c6d commit 0b9728e

File tree

2 files changed

+2045
-0
lines changed

2 files changed

+2045
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
=begin
2+
3+
https://www.hackerrank.com/challenges/bfsshortreach/problem
4+
5+
Output: 6 6 6 6 12 6 12 6 12 12 6 6 6 6 6 12 12 6 6 6 6 12 6 12 6 12 6 12 12 12 12 6 12 12 6 12 12 6 12 6 12 6 12 12 6 6 12 6 6 6 6 12 12 12 12 6 6 6 12 6 6 12 12 12 12 12 12 6 6
6+
=end
7+
require 'pry'
8+
9+
def bfs(n, m, edges, s)
10+
adj_list = {}
11+
dist = {}
12+
edges.each do |e|
13+
if(adj_list[e[0]])
14+
adj_list[e[0]][e[1]] = 6
15+
else
16+
adj_list[e[0]] = {e[1] => 6}
17+
end
18+
if(adj_list[e[1]])
19+
adj_list[e[1]][e[0]] = 6
20+
else
21+
adj_list[e[1]] = {e[0] => 6}
22+
end
23+
end
24+
25+
queue = [s]
26+
dist[s] = 0
27+
while(!queue.empty?)
28+
node = queue.shift
29+
if(adj_list[node])
30+
adj_list[node].each do |neigh, val|
31+
if(!dist[neigh])
32+
queue.push(neigh)
33+
dist[neigh] = dist[node] + val
34+
end
35+
end
36+
end
37+
end
38+
(1..n).to_a.each do |node|
39+
unless(dist[node])
40+
dist[node] = -1
41+
end
42+
end
43+
dist.delete(s)
44+
return dist.sort.collect(&:last)
45+
end
46+
47+
n = 70
48+
m = 1988
49+
s = 16
50+
edges = []
51+
File.open("bfs_shortest_reach_input.txt") do |file|
52+
file.each do |line|
53+
line = line.gsub(/\n/,'')
54+
edges << line.split(" ").collect(&:to_i)
55+
end
56+
end
57+
p bfs(n, m, edges, s)

0 commit comments

Comments
 (0)