Exemplo n.º 1
0
        public void algoritmoKruskal()
        {
            GrafoNoDirigido      grafoK      = new GrafoNoDirigido(grafo);
            List <List <NodoP> > componentes = grafoK.kruskal();

            rel = new List <Arista>();
            Arista temp;

            foreach (List <NodoP> np in componentes)
            {
                for (int i = 0; i < np.Count; i++)
                {
                    temp = new Arista(0);
                    int j = i + 1;
                    temp.peso   = buscaPeso(np[i], np[j]);
                    temp.origen = np[i];
                    i++;
                    temp.destino = np[i];
                    rel.Add(temp);
                }
            }

            rel = rel.OrderBy(x => x.peso).ToList();
            Componente componente = new Componente();

            componente.Show();
            componente.Next.Click += Next_Click;
        }
Exemplo n.º 2
0
        public override Grafo complemento(Graphics g)
        {
            NodoP  nn;
            Arista nnr;
            Grafo  nuevo = new Grafo();

            foreach (NodoP np in this)
            {
                nn = new NodoP(np.nombre, np.centro);
                nuevo.Add(nn);
            }
            nuevo = new GrafoNoDirigido(nuevo);

            foreach (NodoP aux1 in this)                // Ciclo que recorre los nodos del grafo
            {
                if (aux1.aristas.Count == 0)            // si el nodo no tiene aristas
                {
                    foreach (NodoP aux2 in nuevo)       // Ciclo que recorre los nodos del grafo "copia"
                    {
                        if (aux1.nombre != aux2.nombre) // Condición para que el nodo no apunte a si mismo
                        {
                            nnr         = new Arista(0);
                            nnr.origen  = nuevo.Find(x => x.nombre.Equals(aux1.nombre));
                            nnr.destino = aux2;
                            nuevo.Find(x => x.nombre.Equals(aux1.nombre)).aristas.Add(nnr);
                        }
                    }
                }

                else // Si el nodo ya tiene Aristas
                {
                    foreach (NodoP aux2 in nuevo) // Ciclo que recorre los nodos
                    {
                        if (aux1.nombre != aux2.nombre) // Compara que el nodo no se apunte a si mismo
                        {
                            Arista r = new Arista(0);
                            r = aux1.aristas.Find(x => x.destino.nombre.Equals(aux2.nombre));
                            if (r == null)
                            {
                                nnr         = new Arista(0);
                                nnr.origen  = nuevo.Find(x => x.nombre.Equals(aux1.nombre));
                                nnr.destino = aux2;
                                if (nnr != null)
                                {
                                    nuevo.Find(x => x.nombre.Equals(aux1.nombre)).aristas.Add(nnr);
                                }
                            }
                        }
                    }
                }
            }

            //base.complemento(g);

            return(nuevo);
        }