*ë
8:í>c       s”      d  k  Z   d  k Z  d f  d „  ƒ  YZ “ d d d „ Z ª e d j o= « e i d ƒ Z ¬ e e ƒ Z ­ d Ge i e e ƒ GHn d  S(	   Ns   HeapIndiretoc      sø    d  Z    g  h  d „ Z  d „  Z  d „  Z ' d „  Z / d „  Z ; d „  Z A d „  Z H d „  Z K d	 „  Z	 N d
 „  Z
 Q d „  Z T d „  Z [ d „  Z i d „  Z o d „  Z u d „  Z y d „  Z „ d „  Z Š d „  Z RS(   sp    Heap Indireto.
	
	Acessos ao vetor interno são sempre feitos levando em conta que o
	início dele é o elemento 1c    s}      t  g | |  _  | i ƒ  |  _  h  |  _  x< t d t	 |  i ƒ ƒ d  r }  | |  i |  i | <qU Wd S(   s˜   v é a lista de elementos a serem colocados na heap
		p é a lista de 'pesos' de cada elemento de v, endereçada
		de forma p[i], onde i é um elemento de pi   i    N(   s   Nones   vs   selfs   _HeapIndireto__heaps   ps   copys   _HeapIndireto__ps   _HeapIndireto__poss   ranges   lens   is   pos(   s   selfs   vs   ps   i(    (    s   Prim.pys   __init__ s    	c    s      |  i | Sd S(   s~   Retorna a posição de um item dentro da heap.
		
		v é um elemento da heap (não o indice desse elemento na heap, mas seu valor)N(   s   selfs   _HeapIndireto__poss   v(   s   selfs   v(    (    s   Prim.pys   __getPos s   c    s<    " # | d j  o $ t ‚ n % |  i |  i | Sd S(   sD   Retorna o valor de um no na heap.
		
		i é o índice desse no na heapi   N(   s   is
   IndexErrors   selfs   _HeapIndireto__ps   _HeapIndireto__heap(   s   selfs   i(    (    s   Prim.pys
   __getValor s   c    s>   ' * + | d j  o , t ‚ n - | |  i |  i | <d S(   sE   Modifica o valor de um nó da heap.
		
		i é o indice desse no na heapi   N(   s   is
   IndexErrors   vals   selfs   _HeapIndireto__ps   _HeapIndireto__heap(   s   selfs   is   val(    (    s   Prim.pys
   __setValor' s   c    sÁ   / 0 | d j  p
 | d j  o 1 t d ƒ ‚ n 3 |  i |  i | } 4 |  i |  i | |  i |  i | <5 | |  i |  i | <7 |  i | } 8 |  i | |  i | <9 | |  i | <d  S(   Ni   s   Indices inválidos para heap(   s   is   js
   IndexErrors   selfs   _HeapIndireto__poss   _HeapIndireto__heaps   tmp(   s   selfs   is   js   tmp(    (    s   Prim.pys   __troca/ s   %c    s3   ; < = |  i i ƒ  } > d |  i | <? | Sd S(   s)   Remove e retorna o elemento final do heapi    N(   s   selfs   _HeapIndireto__heaps   pops   vs   _HeapIndireto__pos(   s   selfs   v(    (    s   Prim.pys   __pop; s   c    s@   A B | |  i | <C |  i i | ƒ D |  i ƒ  |  i | <d  S(   N(   s   vals   selfs   _HeapIndireto__ps   vs   _HeapIndireto__heaps   appends   tamanhos   _HeapIndireto__pos(   s   selfs   vs   val(    (    s   Prim.pys   __appendA s   c    s   H I t  | d ƒ Sd  S(   Ni   (   s   ints   i(   s   selfs   i(    (    s   Prim.pys   paiH s   c    s   K L | d Sd  S(   Ni   (   s   pai(   s   selfs   pai(    (    s   Prim.pys   esquerdoK s   c    s   N O | d d Sd  S(   Ni   i   (   s   pai(   s   selfs   pai(    (    s   Prim.pys   direitoN s   c    s   Q R t  |  i ƒ d Sd  S(   Ni   (   s   lens   selfs   _HeapIndireto__heap(   s   self(    (    s   Prim.pys   tamanhoQ s   c    sv   T U |  i | ƒ } V | d j oM W |  i | ƒ |  i | ƒ j o' X |  i | | ƒ Y |  i | ƒ n n d  S(   Ni   (   s   selfs   pais   is   _HeapIndireto__getValors   _HeapIndireto__trocas   subir(   s   selfs   is   pai(    (    s   Prim.pys   subirT s
   "c    sã   [ \ |  i ƒ  } ] |  i | ƒ } ^ |  i | ƒ } _ | } a | | j o b | | j o3 c |  i | ƒ |  i | ƒ j  o d | } n n e |  i | ƒ |  i | ƒ j o' f |  i | | ƒ g |  i	 | ƒ n n d  S(   N(
   s   selfs   tamanhos   ns   esquerdos   pais   direitos   menors   _HeapIndireto__getValors   _HeapIndireto__trocas   descer(   s   selfs   pais   ns   direitos   menors   esquerdo(    (    s   Prim.pys   descer[ s   	""c    sT   i j |  i ƒ  } k x8 t | d d d d ƒ d k r } l |  i | ƒ q3 Wd  S(   Ni   i   i    (   s   selfs   tamanhos   ns   ranges   is   descer(   s   selfs   ns   i(    (    s   Prim.pys   constroii s   ! 	c    sF   o p |  i d |  i ƒ  ƒ q |  i ƒ  } r |  i d ƒ s | Sd  S(   Ni   (   s   selfs   _HeapIndireto__trocas   tamanhos   _HeapIndireto__pops   vals   descer(   s   selfs   val(    (    s   Prim.pys	   retiraMino s   c    s0   u v |  i | | ƒ w |  i |  i ƒ  ƒ d  S(   N(   s   selfs   _HeapIndireto__appends   is   vals   subirs   tamanho(   s   selfs   is   val(    (    s   Prim.pys   insereu s   c    sk   y | } |  i | ƒ } ~ | |  i | ƒ j o  t d ƒ ‚ n € |  i | | ƒ  |  i | ƒ d S(   sr   Diminui o valor da chave do elemento 'v' para 'val'
		
		V é um elemento pertencente ao heap (não seu indice nele)s,   O valor atual é menor que o valor fornecido.N(	   s   selfs   _HeapIndireto__getPoss   vs   is   vals   _HeapIndireto__getValors
   ValueErrors   _HeapIndireto__setValors   subir(   s   selfs   vs   vals   i(    (    s   Prim.pys   diminuiValory s   c    s#   „ ‡ ˆ |  i |  i | ƒ ƒ Sd S(   sT   Retorna o peso/valor de um item v.
		
		v é um elemento do do heap, não o seu índiceN(   s   selfs   _HeapIndireto__getValors   _HeapIndireto__getPoss   v(   s   selfs   v(    (    s   Prim.pys   getValor„ s   c    s5   Š ‹ Œ |  i | ƒ d j o Ž d Sn  d Sd S(   s3   Verifica se um elemento está contido no heap ou nãoi    i   N(   s   selfs   _HeapIndireto__getPoss   v(   s   selfs   v(    (    s   Prim.pys   contemŠ s   (   s   __doc__s   __init__s   _HeapIndireto__getPoss   _HeapIndireto__getValors   _HeapIndireto__setValors   _HeapIndireto__trocas   _HeapIndireto__pops   _HeapIndireto__appends   pais   esquerdos   direitos   tamanhos   subirs   descers   constrois	   retiraMins   inseres   diminuiValors   getValors   contem(    (    (    s   Prim.pys   HeapIndireto s(   	i    i † c    s<  “ ™ š t  g |  i ƒ  } œ t ƒ  }  x, |  i ƒ  d  r } ž | i | | ƒ q: WŸ | i
 | d ƒ   t  | | <¡ x± ¡ | i ƒ  d j oš ¢ | i ƒ  } £ x |  i | ƒ d £ rk } ¤ | i | ƒ o |  i | | ƒ | i | ƒ j  o0 ¥ | | | <¦ | i
 | |  i | | ƒ ƒ n qº Wq€ W¨ | Sd S(   sð   Algoritmo de Prim para a AGM do grafo g
	
	Retorna uma "lista de paternidade". O valor de um item 'i' nessa
	lista é o rotulo do vértice pai desse item 'i' na AGM
	
	inf, argumento opcional, é o valor numero usado para representar infinito.i    i   N(   s   Nones   gs   numeroVerticess   pais   HeapIndiretos   qs   listaVerticess   us   inseres   infs   diminuiValors   raizs   tamanhos	   retiraMins   listaAdjacencias   vs   contems   obtemArestas   getValor(   s   gs   raizs   infs   pais   vs   us   q(    (    s   Prim.pys   AGMPrim“ s"    	  	5,s   __main__s   ../brazil58.tsps   A AGM desse grafo custa(	   s   Grafos
   GrafoUtilss   HeapIndiretos   AGMPrims   __name__s   TSPLIB2Grafos   gs   pais   custo_lista_paternidade(   s
   GrafoUtilss   pais   HeapIndiretos   gs   Grafos   AGMPrim(    (    s   Prim.pys   ? s   Œ