示例#1
0
 public Boolean Consulta(int elementoA, int elementoB)
 {
     elementos[0].setCor(VISITADO);
     // Q é a lista que contém os vértices que serão verificados. São os vértices que são "Alcançados" pelo elementoA
     Q = new List <Elemento>();
     AdicionaElemento(Q, elementos[0]);
     for (int v = 0; v < elementos.Count; v++)
     {
         if (elementos[v].getNumero().Equals(elementoA))
         {
             while (Q.Count != 0)
             {
                 // Pega e remove o primeiro elemento de Q
                 Elemento u = RemoveElementoDeQ();
                 // pega as conexões existentes em Q
                 List <Elemento> conexoesLista = u.getConexoes();
                 for (int a = 0; a < conexoesLista.Count; a++)
                 {
                     if (conexoesLista[a].getNumero().Equals(elementoB))
                     {
                         // Se houver uma conexão direta ou indireta retorna true
                         return(true);
                     }
                     // Verifica se o o elemento já foi verificado
                     if (NAO_VISITADO.Equals(conexoesLista[a].getCor()))
                     {
                         AdicionaElemento(Q, conexoesLista[a]);
                         conexoesLista[a].setCor(VISITADO);
                     }
                 }
                 u.setCor(VISITADO_NOS);
             }
             break;
         }
     }
     return(false);
 }
示例#2
0
        public void Conectar(int elementoA, int elementoB)
        {
            Boolean existeA = false, existeB = false;

            for (int i = 0; i < elementos.Count; i++)
            {
                if (!existeA && elementos[i].getNumero().Equals(elementoA))
                {
                    existeA = true;
                }
                if (!existeB && elementos[i].getNumero().Equals(elementoB))
                {
                    existeB = true;
                }
            }

            Elemento vB = null;

            if (!existeB)
            {
                vB = new Elemento(elementoB);
                qtdAtualElementos++;
                if (qtdAtualElementos > qtdTotalElementos)
                {
                    throw new System.Exception("Limite de quantidade de elementos alcançado.");
                }
            }
            else
            {
                for (int i = 0; i < elementos.Count; i++)
                {
                    if (elementos[i].getNumero().Equals(elementoB))
                    {
                        vB = elementos[i];
                    }
                }
            }

            Elemento vA = null;

            if (!existeA)
            {
                vA = new Elemento(elementoA);
                vA.addConexao(vB);
                vB.addConexao(vA);
                qtdAtualElementos++;
                if (qtdAtualElementos > qtdTotalElementos)
                {
                    throw new System.Exception("Limite de quantidade de elementos alcançado.");
                }
            }
            else
            {
                for (int i = 0; i < elementos.Count; i++)
                {
                    if (elementos[i].getNumero().Equals(elementoA))
                    {
                        elementos[i].addConexao(vB);
                        break;
                    }
                }
            }

            if (!existeA)
            {
                elementos.Add(vA);
            }
            if (!existeB)
            {
                elementos.Add(vB);
            }
        }
示例#3
0
 public void addConexao(Elemento elemento)
 {
     this.conexoes.Add(elemento);
 }