Esempio n. 1
0
        public CGrafo construyeK33()
        {
            CGrafo k33 = new CGrafo(1, 0);

            for (int i = 0; i < 6; i++)
            {
                CVertice v = new CVertice(i + 1, 0, 0, Color.White, Color.Black);
                v.setGrado(3);
                CNodoVertice cnv = new CNodoVertice(v);
                k33.getListaAdyacencia().Add(cnv);
            }

            for (int i = 0; i < 3; i++)
            {
                for (int j = 3; j < 6; j++)
                {
                    k33.getListaAdyacencia()[i].getRelaciones().Add(k33.getListaAdyacencia()[j]);
                    k33.getListaAdyacencia()[i].getVertice().getVecinos().Add(k33.getListaAdyacencia()[j].getVertice());
                    k33.getListaAdyacencia()[j].getRelaciones().Add(k33.getListaAdyacencia()[i]);
                    k33.getListaAdyacencia()[j].getVertice().getVecinos().Add(k33.getListaAdyacencia()[i].getVertice());
                    CArista ar = new CArista(k33.getListaAdyacencia()[i].getVertice(), k33.getListaAdyacencia()[j].getVertice(), new Point(0, 0), new Point(0, 0), 0);
                    k33.getListaAristas().Add(ar);
                }
            }

            k33.setNumeroAristas(9);
            k33.setNumeroVertices(6);

            return(k33);
        }
Esempio n. 2
0
 private void conteoDeCaminosToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (grafos != null && grafo_activo != null)
     {
         if (grafo_activo.getNumeroVertices() >= 2)
         {
             DConteo dc = new DConteo(grafo_activo.getNumeroVertices());
             if (dc.ShowDialog() == DialogResult.OK)
             {
                 CNodoVertice cnv1 = grafo_activo.getListaAdyacencia()[(dc.na) - 1], cnv2 = grafo_activo.getListaAdyacencia()[(dc.nb) - 1];
                 int          num_cam = grafo_activo.calculaCaminosREntre(cnv1, cnv2, dc.r), ncam = dc.r;
                 if (cnv1.getVertice().getId() != cnv2.getVertice().getId())
                 {
                     MessageBox.Show(" Existen " + num_cam.ToString() + " caminos de longitud " + ncam.ToString() + " entre el vértice " + cnv1.getVertice().getId().ToString() + " al vértice " + cnv2.getVertice().getId().ToString() + "  ", "Conteo de caminos", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 }
                 else
                 {
                     MessageBox.Show(" Existen " + num_cam.ToString() + " circuitos de longitud " + ncam.ToString() + " para el vértice " + cnv1.getVertice().getId().ToString() + "  ", "Conteo de circuitos", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 }
             }
         }
         else
         {
             MessageBox.Show(" Deben existir por lo menos 2 vertices en el grafo! ", "Error...", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
 }
Esempio n. 3
0
        public CGrafo construyeK5()
        {
            CGrafo k5 = new CGrafo(1, 0);

            for (int i = 0; i < 5; i++)
            {
                CVertice v = new CVertice(i + 1, 0, 0, Color.White, Color.Black);
                v.setGrado(4);
                CNodoVertice cnv = new CNodoVertice(v);
                k5.getListaAdyacencia().Add(cnv);
            }

            foreach (CNodoVertice nv in k5.getListaAdyacencia())
            {
                foreach (CNodoVertice nv2 in k5.getListaAdyacencia())
                {
                    if (nv.getVertice().getId() != nv2.getVertice().getId())
                    {
                        nv.getRelaciones().Add(nv2);
                        nv.getVertice().getVecinos().Add(nv2.getVertice());
                        if (!k5.aristaRepetida(nv.getVertice(), nv2.getVertice()))
                        {
                            CArista ar = new CArista(nv.getVertice(), nv2.getVertice(), new Point(0, 0), new Point(0, 0), 0);
                            k5.getListaAristas().Add(ar);
                        }
                    }
                }
            }

            k5.setNumeroAristas(10);
            k5.setNumeroVertices(5);

            return(k5);
        }
Esempio n. 4
0
        public int getZde(CNodoVertice cnv)
        {
            List <int> zetas;
            int        zmin = -1;

            if (arcos_arbol.Count != 0 && arcos_retroceso.Count != 0)
            {
                zetas = new List <int>();
                foreach (CArista a in arcos_retroceso)
                {
                    if (a.getVOrigen().getId() == cnv.getVertice().getId())
                    {
                        zetas.Add(a.getVDestino().getNumero());
                    }
                    else if (a.getVDestino().getId() == cnv.getVertice().getId())
                    {
                        zetas.Add(a.getVOrigen().getNumero());
                    }
                }

                if (zetas.Count != 0)
                {
                    zetas.Sort();
                    zmin = zetas[0];
                }
            }

            return(zmin);
        }
Esempio n. 5
0
        public int getYde(CNodoVertice cnv)
        {
            List <int> yes  = new List <int>();
            int        ymin = -1;

            foreach (CArista a in arcos_arbol)
            {
                CVertice or = a.getVOrigen(), de = a.getVDestino();
                int      num_or = or.getNumero(), num_de = de.getNumero();
                if (or.getId() == cnv.getVertice().getId() && num_or < num_de)
                {
                    if (de.getBajo() != 0)
                    {
                        yes.Add(de.getBajo());
                    }
                }
                else if (de.getId() == cnv.getVertice().getId() && num_de < num_or)
                {
                    if (or.getBajo() != 0)
                    {
                        yes.Add(or.getBajo());
                    }
                }

                if (yes.Count != 0)
                {
                    yes.Sort();
                    ymin = yes[0];
                }
            }

            return(ymin);
        }
Esempio n. 6
0
 private void puntosDeArticulaciónToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (grafos != null && grafo_activo != null && grafo_activo.getNumeroAristas() > 0)
     {
         DPideVert pv = new DPideVert(grafo_activo.getNumeroVertices());
         pv.setTituloVentana("Puntos de articulación");
         pv.setLabelVertice("Vértice Inicial : ");
         if (pv.ShowDialog() == DialogResult.OK)
         {
             if (grafo_activo.existeVerticeConId(pv.getIdVert()))
             {
                 CRecorridoP  rp  = new CRecorridoP(grafo_activo, (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
                 CNodoVertice cnv = grafo_activo.buscaNodoVertice(pv.getIdVert());
                 rp.RecorridoEnProfundidad(cnv);
                 rp.aplicaArbolAbarcador(grafo_activo.getTipo(), false);
                 rp.RecorridoEnProfundidadPtosArticulacion(cnv);
                 rp.sacaPuntosDeArticulacion(cnv);
                 grafo_activo.borraRP();
             }
             else
             {
                 MessageBox.Show(" El vértice especificado no existe!! ");
             }
         }
     }
 }
Esempio n. 7
0
 public static bool hayVerticeGradoCero(CNodoVertice cnv)
 {
     if (cnv.getVertice().getGrado() == 0)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 } //Delegado para List<CNodoVertice>.Exist
        }//Construye la matriz a partir de la lista de adyacencia del grafo

        public bool esIncidenteCon(CArista ari, CNodoVertice nodo_od)
        {
            bool encontrado = false;

            if (ari.getVOrigen().getId() == nodo_od.getVertice().getId() || ari.getVDestino().getId() == nodo_od.getVertice().getId())
            {
                encontrado = true;
            }

            return(encontrado);
        } //Verifica que existe incidencia en lista de adyacencia
Esempio n. 9
0
        public List <CNodoVertice> construyeLAdyPrima(List <CNodoVertice> lady, CNodoVertice cnv_elim)
        {
            List <CNodoVertice> prima = new List <CNodoVertice>();

            foreach (CNodoVertice cnv in lady)
            {
                prima.Add(cnv);
            }

            prima.Remove(cnv_elim);
            return(prima);
        }
Esempio n. 10
0
 public void RP_RPA(CNodoVertice cnv)
 {
     cnv.getVertice().setVisitado(true);
     foreach (CNodoVertice w in cnv.getRelaciones())
     {
         if (w.getVertice().getVisitado() != true)
         {
             RP_RPA(w);
         }
     }
     cnv.getVertice().setBajo(minimo(cnv.getVertice().getNumero(), getZde(cnv), getYde(cnv)));
 }
Esempio n. 11
0
        public CNodoVertice getCNVdeNumeroMasAltoEnG()
        {
            CNodoVertice mayor = G.getListaAdyacencia()[0];

            foreach (CNodoVertice cnv in G.getListaAdyacencia())
            {
                if (cnv.getVertice().getNumero() > mayor.getVertice().getNumero())
                {
                    mayor = cnv;
                }
            }
            return(mayor);
        }
Esempio n. 12
0
        } //Construye la matriz a partir de la lista de adyacencia del grafo

        public bool estaEnListaRelaciones(CNodoVertice nodo, CNodoVertice relacion)
        {
            bool encontrado = false;

            foreach (CNodoVertice cnv in nodo.getRelaciones())
            {
                if (relacion.getVertice().getId() == cnv.getVertice().getId())
                {
                    encontrado = true;
                    break;
                }
            }
            return(encontrado);
        } //Verifica que existe relacion en lista de adyacencia
Esempio n. 13
0
        public CNodoVertice getCNVenGR(int id)
        {
            CNodoVertice en = null;

            foreach (CNodoVertice cnv in GR)
            {
                if (cnv.getVertice().getId() == id)
                {
                    en = cnv;
                    break;
                }
            }
            return(en);
        }
Esempio n. 14
0
 public void RP_R(CNodoVertice cnv, ref int ndes)
 {
     cnv.getVertice().setVisitado(true);
     cnv.getVertice().setNumero(++num);
     foreach (CNodoVertice w in cnv.getRelaciones())
     {
         if (w.getVertice().getVisitado() != true)
         {
             int nd = 0;
             RP_R(w, ref nd);
             descendientes[G.getListaAdyacencia().IndexOf(w)] = nd;
             ndes += nd + 1;
             enlistaArcosArbol(cnv.getVertice(), w.getVertice());
         }
     }
 }
Esempio n. 15
0
        public void construyeGR()
        {
            G.getListaAdyacencia().Sort(ordenaPorNumero);
            foreach (CNodoVertice nv in G.getListaAdyacencia())
            {
                CNodoVertice nuevo = new CNodoVertice(new CVertice(nv.getVertice().getId(), 0, 0, Color.Transparent, Color.Transparent));
                GR.Add(nuevo);
            }

            foreach (CNodoVertice cnv in GR)
            {
                cnv.setRelacionesFC(getListaNuevaDe(cnv));
            }

            G.getListaAdyacencia().Sort(ordenaPorID);
        }
Esempio n. 16
0
 public bool tieneHijosConBajoMayorOIgualAlNumDe(CNodoVertice cnv)
 {
     foreach (CArista a in arcos_arbol)
     {
         CVertice or = a.getVOrigen(), de = a.getVDestino();
         int      num_or = or.getNumero(), num_de = de.getNumero();
         if (or.getId() == cnv.getVertice().getId() && num_or < num_de && de.getBajo() >= cnv.getVertice().getNumero())
         {
             return(true);
         }
         else if (de.getId() == cnv.getVertice().getId() && num_de < num_or && or.getBajo() >= cnv.getVertice().getNumero())
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 17
0
        //Otros de componentes fuertes
        public List <CNodoVertice> getListaNuevaDe(CNodoVertice nv)
        {
            List <CNodoVertice> listanueva = new List <CNodoVertice>();

            foreach (CNodoVertice cnv in G.getListaAdyacencia())
            {
                foreach (CNodoVertice rel in cnv.getRelaciones())
                {
                    if (rel.getVertice().getId() == nv.getVertice().getId())
                    {
                        listanueva.Add(getCNVenGR(cnv.getVertice().getId()));
                    }
                }
            }

            return(listanueva);
        }
Esempio n. 18
0
        public void sacaPuntosDeArticulacion(CNodoVertice cnv_ini)
        {
            List <CNodoVertice> puntos_articulacion = new List <CNodoVertice>();

            if (laRaizTiene2OMasHijos(cnv_ini))
            {
                puntos_articulacion.Add(cnv_ini);
            }

            foreach (CNodoVertice cnv in G.getListaAdyacencia())
            {
                if (cnv.getVertice().getId() != cnv_ini.getVertice().getId() && tieneHijosConBajoMayorOIgualAlNumDe(cnv))
                {
                    puntos_articulacion.Add(cnv);
                }
            }

            if (puntos_articulacion.Count != 0)
            {
                string cad = "{ ";
                foreach (CNodoVertice p in puntos_articulacion)
                {
                    p.getVertice().setRelleno(Color.LightPink.ToArgb());
                    p.getVertice().dibujate(Graphics.FromImage(G.getBMP()), G.getBMP(), tp);
                    cad += "(" + p.getVertice().getId().ToString() + ")";
                    if (puntos_articulacion.IndexOf(p) != puntos_articulacion.Count - 1)
                    {
                        cad += ", ";
                    }
                }
                cad += " }.        ";
                MessageBox.Show(" Vértices Cut : " + cad, "Puntos de articulación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                foreach (CNodoVertice p in puntos_articulacion)
                {
                    p.getVertice().borrate(Graphics.FromImage(G.getBMP()), G.getBMP(), tp);
                    p.getVertice().setRelleno(Color.LightGoldenrodYellow.ToArgb());
                    p.getVertice().dibujate(Graphics.FromImage(G.getBMP()), G.getBMP(), tp);
                }
            }
            else
            {
                MessageBox.Show(" No existen vértices CUT para el Grafo " + G.getId().ToString() + ".     ", "Puntos de articulación", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Esempio n. 19
0
        public void calculaCaminoMasCorto(CNodoVertice origen)
        {
            List <CNodoVertice> S = new List <CNodoVertice>();
            List <CNodoVertice> P = new List <CNodoVertice>();
            List <CNodoVertice> VS;

            int[] D = new int[n];

            S.Add(origen);

            for (int i = 0; i < n; i++)
            {
                D[i] = C[V.IndexOf(origen), i];
                P.Add(origen);
            }

            for (int j = 0; j < n - 1; j++)
            {
                VS = VminusS(S);
                CNodoVertice w = menorVminusS(D, VS);
                S.Add(w);
                VS = VminusS(S);
                foreach (CNodoVertice cnv in VS)
                {
                    if (G.sonVerticesAdyacentes(cnv.getVertice(), w.getVertice()))
                    {
                        int aux = D[V.IndexOf(cnv)];
                        if (C[V.IndexOf(w), V.IndexOf(cnv)] == INFINITO)
                        {
                            C[V.IndexOf(w), V.IndexOf(cnv)] -= D[V.IndexOf(w)];
                        }

                        D[V.IndexOf(cnv)] = minimoDe(D[V.IndexOf(cnv)], D[V.IndexOf(w)] + C[V.IndexOf(w), V.IndexOf(cnv)]);
                        if (aux != D[V.IndexOf(cnv)])
                        {
                            P[V.IndexOf(cnv)] = w;
                        }
                    }
                }
            }

            muestraResultado(D, P, origen);
        }
Esempio n. 20
0
        public void RecorridoEnProfundidad(CNodoVertice cnvid)
        {
            if (cnvid.getVertice().getVisitado() != true)
            {
                int nd = 0;
                RP_R(cnvid, ref nd);
                descendientes[G.getListaAdyacencia().IndexOf(cnvid)] = nd;
            }

            foreach (CNodoVertice cnv in G.getListaAdyacencia())
            {
                if (cnv.getVertice().getId() != cnvid.getVertice().getId())
                {
                    if (cnv.getVertice().getVisitado() != true)
                    {
                        int nd = 0;
                        RP_R(cnv, ref nd);
                        descendientes[G.getListaAdyacencia().IndexOf(cnv)] = nd;
                    }
                }
            }
        }
Esempio n. 21
0
        public bool laRaizTiene2OMasHijos(CNodoVertice cnv_ini)
        {
            int num_hijos = 0;

            foreach (CArista a in arcos_arbol)
            {
                CVertice or = a.getVOrigen(), de = a.getVDestino();
                int      num_or = or.getNumero(), num_de = de.getNumero();
                if ((or.getId() == cnv_ini.getVertice().getId() && num_or < num_de) ||
                    (de.getId() == cnv_ini.getVertice().getId() && num_de < num_or))
                {
                    num_hijos++;
                }
            }

            if (num_hijos >= 2)
            {
                return(true);
            }

            return(false);
        }
Esempio n. 22
0
        public void CF_R(CNodoVertice cnv, ref List <int> ar, int vuelta)
        {
            cnv.getVertice().setVisitado(true);

            foreach (CNodoVertice w in cnv.getRelaciones())
            {
                if (w.getVertice().getVisitado() != true)
                {
                    ar.Add(w.getVertice().getId());
                    CF_R(w, ref ar, vuelta);
                }
            }

            if (vuelta == 1)
            {
                cnv.getVertice().setNumero(++num);
            }
            else
            {
                cnv.getVertice().setNumero(++num2);
            }
        }
Esempio n. 23
0
        //Puntos de articulacion
        public void RecorridoEnProfundidadPtosArticulacion(CNodoVertice cnvid)
        {
            foreach (CNodoVertice cv in G.getListaAdyacencia())
            {
                cv.getVertice().setVisitado(false);
            }

            if (cnvid.getVertice().getVisitado() != true)
            {
                RP_RPA(cnvid);
            }

            foreach (CNodoVertice cnv in G.getListaAdyacencia())
            {
                if (cnv.getVertice().getId() != cnvid.getVertice().getId())
                {
                    if (cnv.getVertice().getVisitado() != true)
                    {
                        RP_RPA(cnv);
                    }
                }
            }
        }
Esempio n. 24
0
        //Recorrido en Amplitud
        public void recorridoEnAmplitud(CNodoVertice vert_ini)
        {
            vert_ini.getVertice().setVisitado(true);
            List <CNodoVertice> Vp = construyeLAdyPrima(G.getListaAdyacencia(), vert_ini);
            List <CNodoVertice> Q  = new List <CNodoVertice>();

            Q.Add(vert_ini);

            while (Vp.Count != 0)
            {
                CNodoVertice u = Q[0];
                Q.RemoveAt(0);
                foreach (CNodoVertice w in u.getRelaciones())
                {
                    if (!w.getVertice().getVisitado())
                    {
                        w.getVertice().setVisitado(true);
                        Q.Add(w);
                        enlistaArcosArbol(u.getVertice(), w.getVertice());
                        Vp.Remove(w);
                    }
                }
            }
        }
Esempio n. 25
0
        public void muestraResultado(int[] pesos_totales, List <CNodoVertice> caminos, CNodoVertice origen)
        {
            string    camaux = "";
            DataTable dt     = new DataTable();

            object[]   values    = new object[3];
            int        ind       = 0;
            List <int> camino    = new List <int>();
            bool       sincamino = false;

            dt.Columns.Add("Destino");
            dt.Columns.Add("Camino");
            dt.Columns.Add("Peso Total");

            for (int i = 0; i < pesos_totales.Length; i++)
            {
                ind       = i;
                values[0] = V[i].getVertice().getId().ToString();

                if (pesos_totales[i] != INFINITO && pesos_totales[i] >= 0)
                {
                    values[2] = " " + pesos_totales[i].ToString();
                }
                else
                {
                    sincamino = true;
                    values[2] = " - ";
                }

                while (origen.getVertice().getId() != caminos[ind].getVertice().getId())
                {
                    camino.Add(caminos[ind].getVertice().getId());
                    ind = V.IndexOf(caminos[ind]);
                }

                camaux += origen.getVertice().getId().ToString() + ", ";
                for (int y = camino.Count - 1; y >= 0; y--)
                {
                    camaux += camino[y].ToString() + ", ";
                }

                camaux += V[i].getVertice().getId().ToString();

                if (sincamino)
                {
                    values[1] = " No existe";
                    sincamino = false;
                }
                else
                {
                    values[1] = camaux;
                }

                dt.Rows.Add(values);
                camaux = "";
                camino.Clear();
            }

            DDijkstra dij = new DDijkstra(dt, origen.getVertice().getId());

            dij.ShowDialog();
        }
Esempio n. 26
0
 public int ordenaPorNumero(CNodoVertice nv1, CNodoVertice nv2)
 {
     return(nv2.getVertice().getNumero().CompareTo(nv1.getVertice().getNumero()));
 }
Esempio n. 27
0
 public int ordenaPorID(CNodoVertice nv1, CNodoVertice nv2)
 {
     return(nv1.getVertice().getId().CompareTo(nv2.getVertice().getId()));
 }