    # File lib/graphviz/theory.rb, line 80
        def moore_dijkstra( dep, arv )
          dep = @graph.get_node(dep) unless dep.kind_of?(GraphViz::Node)
          arv = @graph.get_node(arv) unless arv.kind_of?(GraphViz::Node)

          m = distance_matrix
          n = @graph.node_count
          # Table des sommets à choisir
          c = [dep.index]
          # Table des distances
          d = []
          d[dep.index] = 0

          # Table des predecesseurs
          pred = []

          @graph.each_node do |name, k|
            if k != dep
              d[k.index] = m[dep.index+1,k.index+1]
              pred[k.index] = dep
            end
          end

          while c.size < n
            # trouver y tel que d[y] = min{d[k];  k sommet tel que k n'appartient pas à c}
            mini = 1.0/0.0
            y = nil
            @graph.each_node do |name, k|
              next if c.include?(k.index)
              if d[k.index] < mini
                mini = d[k.index]
                y = k
              end
            end

            # si ce minimum est ∞ alors sortir de la boucle fin si
            break unless mini.to_f.infinite?.nil?

            c << y.index
            @graph.each_node do |name, k|
              next if c.include?(k.index)
              if d[k.index] > d[y.index] + m[y.index+1,k.index+1]
                d[k.index] = d[y.index] + m[y.index+1,k.index+1]
                pred[k.index] = y
              end
            end
          end

          # Construction du chemin le plus court
          ch = []
          k = arv
          while k.index != dep.index
            ch.unshift(k.id)
            k = pred[k.index]
          end
          ch.unshift(dep.id)

          if d[arv.index].to_f.infinite?
            return nil
          else
            return( {
              :path => ch,
              :distance => d[arv.index]
            } )
          end
        end