예제 #1
0
 //Retorna o elemento da aresta
 public int removerAresta(Aresta aresta)
 {
     aresta.origem.arestas.Remove(aresta);
     aresta.destino.arestas.Remove(aresta);
     arestas.Remove(aresta);
     return(aresta.peso);
 }
예제 #2
0
파일: Heap.cs 프로젝트: Marcos1994/MeuGrafo
 /*O(log(n))*/
 public void Add(Aresta aresta)
 {
     this.expandirArestas();
     arestas[proximoElemento] = aresta;
     this.upHeap(proximoElemento);
     proximoElemento++;
 }
예제 #3
0
파일: Heap.cs 프로젝트: Marcos1994/MeuGrafo
        /*O(n)*/
        public void Remove(Aresta aresta)
        {
            if (proximoElemento-- == 0)
            {
                throw new HeapException("A Heap está vazia");
            }
            int posicao = 0;

            for (; posicao <= proximoElemento; posicao++)
            {
                if (arestas[posicao].Equals(aresta))
                {
                    break;
                }
            }
            if (posicao > proximoElemento)
            {
                throw new HeapException("Elemento não encontrado");
            }
            if (proximoElemento != 0)
            {
                arestas[posicao] = arestas[proximoElemento];
                if (arestas[posicao].peso > aresta.peso)
                {
                    downHeap(posicao);
                }
                else if (arestas[posicao].peso < aresta.peso)
                {
                    upHeap(posicao);
                }
            }
        }
예제 #4
0
 public ArestaComposta(Vertice origemAresta, Vertice destinoAresta, Aresta arestaSimples)
 {
     peso    = arestaSimples.peso;
     origem  = origemAresta;
     destino = destinoAresta;
     caminho = new List <Aresta>();
     caminho.Add(arestaSimples);
 }
예제 #5
0
파일: Heap.cs 프로젝트: Marcos1994/MeuGrafo
 /*O(n)*/
 public Aresta[] ToArray()
 {
     Aresta[] retorno = new Aresta[proximoElemento];
     for (int i = 0; i < proximoElemento; i++)
     {
         retorno[i] = arestas[i];
     }
     return(retorno);
 }
예제 #6
0
파일: Heap.cs 프로젝트: Marcos1994/MeuGrafo
 /*O(n)*/
 private void expandirArestas()
 {
     if (proximoElemento == tamanho)
     {
         tamanho *= 2;
         Aresta[] aux = arestas;
         arestas = new Aresta[tamanho];
         for (int i = 0; i < proximoElemento; i++)
         {
             arestas[i] = aux[i];
         }
     }
 }
예제 #7
0
파일: Heap.cs 프로젝트: Marcos1994/MeuGrafo
        /*O(log(n))*/
        public Aresta Remove()
        {
            if (proximoElemento == 0)
            {
                throw new HeapException("A Heap está vazia");
            }
            Aresta retorno = arestas[0];

            arestas[0] = arestas[--proximoElemento];
            arestas[proximoElemento] = null;
            this.downHeap();
            return(retorno);
        }
예제 #8
0
        //Retorna a nova aresta; O elemento é da aresta
        public Aresta inserirAresta(Vertice origem, Vertice destino, int peso = 0)
        {
            if (peso < 0)
            {
                peso = 0;
            }
            Aresta a = new Aresta(origem, destino, peso);

            arestas.Add(a);
            origem.arestas.Add(a);
            destino.arestas.Add(a);
            return(a);
        }
예제 #9
0
파일: Heap.cs 프로젝트: Marcos1994/MeuGrafo
 public Heap()
 {
     proximoElemento = 0;
     tamanho         = 16;
     arestas         = new Aresta[tamanho];
 }
예제 #10
0
 public ArestaComposta(Vertice origem, Vertice destino, int peso = int.MaxValue, Aresta aresta = null)
     : base(origem, destino, peso)
 {
     this.peso    = peso;
     this.origem  = origem;
     this.destino = destino;
     this.caminho = new List <Aresta>();
     if (aresta != null && aresta.GetType().Equals(this))             //se for uma aresta composta
     {
         this.caminho = ((ArestaComposta)aresta).caminho;
     }
     else if (aresta != null)
     {
         caminho.Add(aresta);
     }
 }
예제 #11
0
 //Substitui o elemento armazenado no vértice "vertice" por "novoElemento"
 public void substituir(Aresta aresta, int novoPeso)
 {
     aresta.peso = novoPeso;
 }