예제 #1
0
        // LARGURA

        public void largura(int v)
        {
            visitado = new bool[getN()];

            Fila fila = new Fila(getN());

            fila.enfileirar(v);

            visitado[v] = true;


            while (!fila.vazia())
            {
                int d = fila.desenfileirar();

                for (int i = 0; i < getN(); i++)
                {
                    for (int j = 0; j < getN(); j++)
                    {
                        Aresta a = getAresta(i, j);

                        if (getN() != 0 && !visitado[i])
                        {
                            visitado[i] = true;
                            fila.enfileirar(i);
                            getVertice(i).setCor(Color.Yellow);
                        }
                        if (a != null)
                        {
                            a.setCor(Color.Red);
                        }
                    }
                }
            }
        }
예제 #2
0
        public void largura(int v)
        {
            Fila f = new Fila(matAdj.GetLength(0));

            f.enfileirar(v);
            visitado[v] = true; // marca V como visitado
            while (!f.vazia())
            {
                v = f.desenfileirar(); // retira o próximo vértice da fila
                for (int i = 0; i < matAdj.GetLength(0); i++)
                {
                    // se I é adjacente a V e I ainda não foi visitado
                    if (matAdj[v, i] != matAdj[0, 0] && !visitado[i])
                    {
                        getAresta(v, i).setCor(Color.Orange);
                        visitado[i] = true; // marca i como visitado
                        f.enfileirar(i);    // enfileira i
                    }
                }
            }
        }
예제 #3
0
        public void largura(int v)
        {
            // vetor VISITADO[] deve ser inicializado com FALSE
            Fila f = new Fila(getN());

            f.enfileirar(v);
            visitado[v] = true; // marca V como visitado
            while (!f.vazia())
            {
                v = f.desenfileirar(); // retira o próximo vértice da fila
                for (int i = 0; i < getN(); i++)
                {
                    // se I é adjacente a V e I ainda não foi visitado
                    if (getAresta(v, i) != null && !visitado[i])
                    {
                        visitado[i] = true; // marca i como visitado
                        getAresta(v, i).setCor(Color.Red);
                        getVertice(i).setCor(Color.Black);
                        Thread.Sleep(1000);
                        f.enfileirar(i); // enfileira i
                    }
                }
            }
        }
예제 #4
0
        //Minha própria implementação do número cromático!
        public int numeroCromatico(int v)
        {
            Color[] vet = new Color[8]; // Vetor guardando as cores!
            vet[0] = Color.GreenYellow;
            vet[1] = Color.Blue;
            vet[2] = Color.Red;
            vet[3] = Color.Yellow;
            vet[4] = Color.Purple;
            vet[5] = Color.Pink;
            vet[6] = Color.Gray;
            vet[7] = Color.Black;

            List <Color> CoresPassadas = new List <Color>(); // Lista de cores
            List <Color> TotalCores    = new List <Color>(); // Total de cores

            Fila f = new Fila(getN());

            f.enfileirar(v);
            visitado[v] = true; // marca V como visitado
            int j = 0;

            while (!f.vazia())
            {
                v = f.desenfileirar(); // retira o próximo vértice da fila
                if (j == 0)
                {                      // Colorindo o primeiro vértice.
                    getVertice(v).setCor(vet[0]);
                    TotalCores.Add(vet[0]);
                }
                for (int i = 0; i < getN(); i++)
                {
                    // se I é adjacente a V e I ainda não foi visitado
                    if (getAresta(v, i) != null && !visitado[i])
                    {
                        visitado[i] = true;                // marca i como visitado
                        getAresta(v, i).setCor(Color.Red); // Marcando a linha visitada
                        //Validação de vizinhos para cor!
                        for (int u = 0; u < getN(); u++)
                        {
                            if (getAresta(i, u) != null && getVertice(u).getCor() != Color.Chocolate) // cor chocolate, não foi visitado ainda.
                            {
                                CoresPassadas.Add(getVertice(u).getCor());
                            }
                        }

                        int marcador = 0;
                        for (int color = 0; color < vet.Length; color++)
                        {
                            if (!CoresPassadas.Contains(vet[color]) && marcador == 0)
                            {
                                getVertice(i).setCor(vet[color]);
                                if (!TotalCores.Contains(vet[color])) // Alimentando lista adicional para calculado o xgh
                                {
                                    TotalCores.Add(vet[color]);
                                }
                                marcador++;
                            }
                        }
                        CoresPassadas.Clear(); // Limpando lista

                        Thread.Sleep(1000);
                        f.enfileirar(i); // enfileira i
                    }
                }
                j++;
            }

            return(TotalCores.Count);
        }