# File lib/rgl/transitiv_closure.rb, line 23 23: def transitive_closure_floyd_warshal 24: raise NotDirectedError, 25: "transitive_closure makes sense only for directed graphs." unless directed? 26: tc = to_adjacency # direct links 27: 28: # indirect links 29: 30: each_vertex do |vi| 31: each_vertex do |vj| 32: each_vertex do |vk| 33: unless tc.has_edge?(vi, vj) 34: tc.add_edge(vi, vj) if has_edge?(vi, vk) and 35: has_edge?(vk, vj) 36: end 37: end 38: end 39: end 40: tc 41: end