File tree Expand file tree Collapse file tree 2 files changed +2045
-0
lines changed Expand file tree Collapse file tree 2 files changed +2045
-0
lines changed Original file line number Diff line number Diff line change
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 )
You can’t perform that action at this time.
0 commit comments