コード例 #1
0
        public Vertice encontrarVertice(String nome)
        {
            Vertice            aux       = new Vertice();
            NohLista <Vertice> percorrer = vertices.getInicio();

            bool encontrou = false;

            if (isEmpty())
            {
                return(null);
            }
            else
            {
                do
                {
                    if (percorrer.getData().getName().Equals(nome))
                    {
                        encontrou = true;
                        aux       = percorrer.getData();
                        break;
                    }
                    percorrer = percorrer.getNext();
                } while (percorrer != null);

                if (encontrou)
                {
                    return(aux);
                }
                else
                {
                    return(null);
                }
            }
        }
コード例 #2
0
        public void inserirDepois(TAD elemento, TAD inserir)
        {
            NohLista <TAD> novoNoh = new NohLista <TAD>(inserir);

            if (isEmpty())
            {
                inicio = novoNoh;
                fim    = novoNoh;
            }
            else
            {
                NohLista <TAD> aux       = inicio;
                bool           encontrou = false;
                do
                {
                    if (aux.getData().Equals(elemento))
                    {
                        encontrou = true;
                        break;
                    }
                    else
                    {
                        aux = aux.getNext();
                    }
                } while (aux != null);
                if (encontrou)
                {
                    if (aux == fim)
                    {
                        novoNoh.setPrior(aux);
                        aux.setNext(novoNoh);
                        fim = novoNoh;
                    }
                    else
                    {
                        novoNoh.setNext(aux.getNext());
                        novoNoh.setPrior(aux);
                        aux.setNext(novoNoh);
                        novoNoh.getNext().setPrior(novoNoh);
                    }
                }
                else
                {
                    Console.WriteLine("Item não Encontrado!!");
                }
            }
        }
コード例 #3
0
 public void remove(TAD n)
 {
     if (isEmpty())
     {
         Console.WriteLine("Lista vazia!! Impossível Remover!!");
     }
     else
     {
         NohLista <TAD> aux       = inicio;
         bool           encontrou = false;
         do
         {
             if (aux.getData().Equals(n))
             {
                 encontrou = true;
                 break;
             }
             else
             {
                 aux = aux.getNext();
             }
         } while (aux != null);
         if (encontrou)
         {
             if (aux.getPrior() == null && aux.getNext() == null)
             {
                 inicio = null;
                 fim    = null;
                 //Console.WriteLine("Item removido: " + aux.getData());
             }
             else if (aux.getPrior() == null)
             {
                 aux.getNext().setPrior(aux.getPrior());
                 inicio = aux.getNext();
                 //Console.WriteLine("Item removido: " + aux.getData());
             }
             else if (aux.getNext() == null)
             {
                 aux.getPrior().setNext(aux.getNext());
                 fim = aux.getPrior();
                 //Console.WriteLine("Item removido: " + aux.getData());
             }
             else
             {
                 aux.getPrior().setNext(aux.getNext());
                 aux.getNext().setPrior(aux.getPrior());
                 //Console.WriteLine("Item removido: " + aux.getData());
             }
         }
         else
         {
             Console.WriteLine("Item não Encontrado!!");
         }
     }
 }
コード例 #4
0
 public void imprime()
 {
     if (isEmpty())
     {
         Console.WriteLine("Lista vazia - Impossível Imprimir!");
     }
     else
     {
         NohLista <TAD> aux = new NohLista <TAD>();
         aux = inicio;
         Console.Write("Lista:   ");
         do
         {
             Console.Write(aux.getData() + "    ");
             aux = aux.getNext();
         } while (aux != null);
     }
 }
コード例 #5
0
        public String encontrarCaminho(String orig, String dest)
        {
            Vertice         origV = encontrarVertice(orig);
            Vertice         destV = encontrarVertice(dest);
            Lista <Vertice> fila  = new Lista <Vertice>();

            fila.insereNoFim(origV);

            NohLista <Vertice> percorrer = vertices.getInicio();

            do
            {
                if (percorrer.getData().Equals(origV))
                {
                    percorrer.getData().setDistParcial(0);
                    percorrer.getData().setState(false);
                }
                else
                {
                    percorrer.getData().setDistParcial(infinito);
                    percorrer.getData().setState(false);
                }
                percorrer = percorrer.getNext();
            } while (percorrer != null);

            encontrarCaminho(origV, destV, fila);


            origV = encontrarVertice(orig);
            destV = encontrarVertice(dest);
            Vertice percVertices = destV;
            String  caminhoFinal = percVertices.getName() + "(" + percVertices.getDistParcial().ToString() + "km)" + "\n";

            do
            {
                percVertices = percVertices.getAntecessor();
                caminhoFinal = percVertices.getName() + "(" + percVertices.getDistParcial().ToString() + "km)" + "  ->  " + caminhoFinal;
            } while (percVertices != origV);

            return(caminhoFinal);
        }
コード例 #6
0
        private void encontrarCaminho(Vertice percorrer, Vertice dest, Lista <Vertice> filaVisitar)
        {
            NohLista <Aresta> arestaAux = percorrer.getArestas().getInicio();
            Vertice           verticeDaAresta;

            //Laço para verificar se a distância parcial até aquele nó é menor que a já existente:
            do
            {
                int d = percorrer.getDistParcial() + arestaAux.getData().getDistance();
                verticeDaAresta = arestaAux.getData().getDestiny();

                if (d < arestaAux.getData().getDestiny().getDistParcial())
                {
                    verticeDaAresta.setDistParcial(d);
                    verticeDaAresta.setAntecessor(percorrer);
                    verticeDaAresta.setState(false);
                    filaVisitar.insereNoFim(verticeDaAresta);
                }

                arestaAux = arestaAux.getNext();
            } while (arestaAux != null);

            percorrer.setState(true);

            do
            {
                if (!filaVisitar.getInicio().getData().getState())
                {
                    encontrarCaminho(filaVisitar.getInicio().getData(), dest, filaVisitar);
                }
                else
                {
                    filaVisitar.remove(filaVisitar.getInicio().getData());
                }
            } while (filaVisitar.getInicio() != null);
        }