Beispiel #1
0
        // Metodo encargado de encontrar si dos nodos estan en la misma posición
        public NodoP nodoIgual(Grafo grafo)
        {
            NodoP igual = null;
            NodoP compara;

            igual = grafo[0];
            foreach (NodoP np in grafo)
            {
                if (np != igual)
                {
                    compara = grafo.Find(x => x.centro.Equals(igual.centro));
                    if (compara != null && compara != np)
                    {
                        return(igual);
                    }
                }
            }
            return(igual);
        }
Beispiel #2
0
        private void metodosAdicionales(object sender, ToolStripItemClickedEventArgs e)
        {
            numericUpDown1.Visible = false;
            numericUpDown2.Visible = false;
            numericUpDown3.Visible = false;
            int  i     = 0;
            int  j     = 0;
            bool vacio = false;

            bool   band = false;
            Random rand = new Random();

            switch (e.ClickedItem.AccessibleName)
            {
            case "complemento":
                bpar = false;
                quitaPesos();
                quitaNumeric();
                obtenPropiedades();
                if (AristaNoDirigida.Enabled == true && AristaDirigida.Enabled == true)
                {
                    grafo      = new GrafoNoDirigido(grafo);
                    grafo.tipo = 2;
                    grafo      = grafo.complemento(g);
                    asignaPropiedades();
                    AristaDirigida.Enabled = false;
                }
                else
                if (AristaDirigida.Enabled == true && AristaNoDirigida.Enabled == false)
                {
                    grafo = grafo.complemento(g);
                    asignaPropiedades();
                    grafo.penA.CustomEndCap = arrow;
                }
                else if (AristaDirigida.Enabled == false && AristaNoDirigida.Enabled == true)
                {
                    grafo = grafo.complemento(g);
                    asignaPropiedades();
                }

                grafo.numN = grafo.Count;
                //grafo.ImprimirGrafo(g);
                Form1_Paint(this, null);
                break;

            case "preExamen_1":
                if (AristaNoDirigida.Enabled == true && AristaDirigida.Enabled == false)
                {
                    PreExamen pre = new PreExamen(grafo);
                    pre.Show();
                }
                else
                {
                    MessageBox.Show("Tiene que ser grafo no  dirigido");
                }

                break;

            case "nPartita":
                bpar = true;

                List <List <int> > partita = new List <List <int> >();
                List <Color>       color   = coloreate();
                partita = grafo.nPartita(g);
                //grafo.ImprimirGrafo(g, bpar);
                nPartita nPartita = new nPartita(partita, grafo);

                i = rand.Next(0, color.Count);
                foreach (List <int> aux1 in partita)
                {
                    foreach (int aux2 in aux1)
                    {
                        grafo.Find(x => x.nombre.Equals(aux2)).colorN = new SolidBrush(color[i]);
                        j = i;
                    }
                    if (i < color.Count - 1)
                    {
                        i++;
                    }
                    else
                    {
                        i = 0;
                    }
                }
                // grafo.ImprimirGrafo(g, bpar);
                // Form1_Paint(this, null);
                //  grafo.ImprimirGrafo(g, bpar);
                nPartita.Show();
                break;

            case "MatrizInfinita":

                MatrizInfinita matriz = new MatrizInfinita(grafo);
                matriz.Show();
                break;

            case "nodoPendiente":
                List <int> pendientes = new List <int>();
                List <int> cut        = new List <int>();
                grafo      = new GrafoNoDirigido(grafo);
                grafo.tipo = 2;
                bpar       = true;
                pendientes = grafo.nodoPendiente();
                if (pendientes.Count == 0)
                {
                    MessageBox.Show("No tiene nodo Pendiente");
                }
                //  cut = grafo.verticeCut();
                foreach (int aux1 in pendientes)
                {
                    grafo.Find(x => x.nombre.Equals(aux1)).colorN = new SolidBrush(Color.Red);
                    grafo.Find(x => x.nombre.Equals(aux1)).aristas[0].destino.colorN            = new SolidBrush(Color.Green);
                    grafo.Find(x => x.nombre.Equals(aux1)).aristas[0].colorA                    = new Pen(new SolidBrush(Color.Blue));
                    grafo.Find(x => x.nombre.Equals(aux1)).aristas[0].destino.aristas[0].colorA = new Pen(new SolidBrush(Color.Blue));
                }
                foreach (int nodo in cut)
                {
                    grafo.Find(x => x.nombre.Equals(nodo)).colorN = new SolidBrush(Color.Green);
                }
                bpar = true;
                break;

            case "Euleriano":
                Euler();
                break;

            case "warner":
                int warner;
                warner = grafo.warner(g, nodoW);
                if (warner == 1)
                {
                    MessageBox.Show("Tiene un K5");
                }
                else if (warner == 2)
                {
                    MessageBox.Show("Tiene un K3,3");
                }
                else
                {
                    MessageBox.Show("No tiene K5 ni K3,3");
                }
                break;

            case "dijkstra":
                algoritmoDijkstra();
                break;

            case "kruskal":
                iKruskal = 0;
                algoritmoKruskal();
                break;
            }
        }