コード例 #1
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);
        }
コード例 #2
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;
        }
コード例 #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);
        }
コード例 #4
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);
        }
コード例 #5
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;
        }
コード例 #6
0
        } //Con teorema de los 4 colores

        public void despintarNodosAdyacentesA(CVertice vertice)
        {
            foreach (CVertice v in vertice.getVecinos())
            {
                v.setRelleno(Color.LightGoldenrodYellow.ToArgb());
                v.setPintado(false);
            }
        }
コード例 #7
0
ファイル: CArista.cs プロジェクト: jluisacosta/Graph-Editor
 //Constructor
 public CArista(CVertice or,CVertice de, Point o, Point d,int tipo_ar)
 {
     po = o;
     pd = d;
     origen = or;
     destino = de;
     tipo = tipo_ar;
     peso = 0;
 }
コード例 #8
0
 public bool esXDescendienteDeY(CVertice X, CVertice Y)
 {
     if (Y.getNumero() <= X.getNumero() &&
         X.getNumero() <= (Y.getNumero() + descendientes[G.getListaAdyacencia().IndexOf(G.buscaNodoVertice(Y))]))
     {
         return(true);
     }
     return(false);
 }
コード例 #9
0
ファイル: CArista.cs プロジェクト: jluisacosta/Graph-Editor
 //Constructor
 public CArista(CVertice or, CVertice de, Point o, Point d, int tipo_ar)
 {
     po      = o;
     pd      = d;
     origen  = or;
     destino = de;
     tipo    = tipo_ar;
     peso    = 0;
 }
コード例 #10
0
        public void pintaNodo4Colores(CVertice vertice, int color_asignado)
        {
            if (num_cromatico < (color_asignado + 1))
            {
                num_cromatico++;
            }

            vertice.setRelleno(colores[color_asignado].ToArgb());
            vertice.setPintado(true);
        } //Con teorema de los 4 colores
コード例 #11
0
        public bool esElUltimoEnPintar(CVertice v)
        {
            foreach (CNodoVertice cnv in G.getListaAdyacencia())
            {
                if (cnv.getVertice().getId() != v.getId() && !v.estaPintado())
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #12
0
ファイル: CKruskal.cs プロジェクト: jluisacosta/Graph-Editor
        public List <CVertice> componenteQueContiene(CVertice v)
        {
            List <CVertice> cv = null;

            foreach (List <CVertice> comp in componentes)
            {
                if (comp.Contains(v))
                {
                    cv = comp;
                    break;
                }
            }

            return(cv);
        }
コード例 #13
0
        public bool hayVecinoConColor(CVertice vertice, int color)
        {
            foreach (CVertice vecino in vertice.getVecinos())
            {
                if (vecino.estaPintado())
                {
                    if (vecino.getArgbRelleno() == colores[color].ToArgb())
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
コード例 #14
0
ファイル: CKruskal.cs プロジェクト: jluisacosta/Graph-Editor
        public List<CVertice> componenteQueContiene(CVertice v)
        {
            List<CVertice> cv = null;

            foreach (List<CVertice> comp in componentes)
            {
                if (comp.Contains(v))
                {
                    cv = comp;
                    break;
                }
            }

            return cv;
        }
コード例 #15
0
        public CVertice getNodoDeMayorGradoDeErrorSinPintar()
        {
            CVertice encontrado = null;
            int      mayorGE    = 0;

            foreach (CNodoVertice cnv in G.getListaAdyacencia())
            {
                if (!cnv.getVertice().estaPintado() && cnv.getVertice().getGradoError() >= mayorGE)
                {
                    mayorGE    = cnv.getVertice().getGrado();
                    encontrado = cnv.getVertice();
                }
            }
            return(encontrado);
        }
コード例 #16
0
        public bool hayColorDisponibeNColores(CVertice vertice, ref int color)
        {
            bool band = false;

            for (int colori = AZUL; colori < NEGRO; colori++)
            {
                if (!hayVecinoConColor(vertice, colori))
                {
                    color = colori;
                    band  = true;
                    break;
                }
            }

            return(band);
        }
コード例 #17
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);
 }
コード例 #18
0
 private void obtenerCentroToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (grafos != null && grafo_activo != null && grafo_activo.getTipo() == DIRIGIDO && grafo_activo.getNumeroAristas() > 0)
     {
         if (!grafo_activo.tienePeso())
         {
             DAddPeso dap = new DAddPeso(grafo_activo.getListaAristas());
             grafo_activo.showHideIdAristas(true, (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
             if (dap.ShowDialog() == DialogResult.OK)
             {
                 grafo_activo.setPesos(dap.getPesos());
                 grafo_activo.showHideIdAristas(false, (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
                 grafo_activo.showHidePesos(true, (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
                 CFloyd cf = new CFloyd(grafo_activo);
                 cf.Floyd();
                 CVertice centro = cf.dameCentro().getVertice();
                 centro.setRelleno(Color.SpringGreen.ToArgb());
                 centro.dibujate(Graphics.FromImage(grafo_activo.getBMP()), grafo_activo.getBMP(), (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
                 MessageBox.Show(" Vértice Central : " + centro.getId().ToString() + ".     ", "Centro del Grafo " + grafo_activo.getId().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Information);
                 centro.borrate(Graphics.FromImage(grafo_activo.getBMP()), grafo_activo.getBMP(), (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
                 centro.setRelleno(Color.LightGoldenrodYellow.ToArgb());
                 centro.dibujate(Graphics.FromImage(grafo_activo.getBMP()), grafo_activo.getBMP(), (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
                 grafo_activo.showHidePesos(false, (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
             }
             else
             {
                 grafo_activo.showHideIdAristas(false, (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
             }
         }
         else
         {
             grafo_activo.showHidePesos(true, (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
             CFloyd cf = new CFloyd(grafo_activo);
             cf.Floyd();
             CVertice centro = cf.dameCentro().getVertice();
             centro.setRelleno(Color.SpringGreen.ToArgb());
             centro.dibujate(Graphics.FromImage(grafo_activo.getBMP()), grafo_activo.getBMP(), (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
             MessageBox.Show(" Vértice Central : " + centro.getId().ToString() + ".     ", "Centro del Grafo " + grafo_activo.getId().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Information);
             centro.borrate(Graphics.FromImage(grafo_activo.getBMP()), grafo_activo.getBMP(), (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
             centro.setRelleno(Color.LightGoldenrodYellow.ToArgb());
             centro.dibujate(Graphics.FromImage(grafo_activo.getBMP()), grafo_activo.getBMP(), (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
             grafo_activo.showHidePesos(false, (TabPage)Pestanas.Controls[Pestanas.SelectedIndex]);
         }
     }
 }
コード例 #19
0
 public void enlistaArcosArbol(CVertice origen, CVertice destino)
 {
     foreach (CArista a in G.getListaAristas())
     {
         if (G.getTipo() == DIRIGIDO)
         {
             if (a.getVOrigen().getId() == origen.getId() && a.getVDestino().getId() == destino.getId())
             {
                 arcos_arbol.Add(a);
             }
         }
         else
         {
             if ((a.getVOrigen().getId() == origen.getId() && a.getVDestino().getId() == destino.getId()) ||
                 a.getVOrigen().getId() == destino.getId() && a.getVDestino().getId() == origen.getId())
             {
                 arcos_arbol.Add(a);
             }
         }
     }
 }
コード例 #20
0
        public void pintaNodoNColores(CVertice vertice)
        {
            int color_asignado = AZUL;

            foreach (CVertice vecino in vertice.getVecinos())
            {
                if (vecino.estaPintado())
                {
                    if (vecino.getArgbRelleno() == colores[color_asignado].ToArgb())
                    {
                        if (color_asignado != NEGRO)
                        {
                            color_asignado++;
                        }
                    }
                }
            }

            vertice.setRelleno(colores[color_asignado].ToArgb());
            vertice.setPintado(true);
        } //General numero cromatico arbitrario
コード例 #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);
        }
コード例 #22
0
 public void coloreoDeGrafoNColores(TabPage tp)
 {
     if (hayNodoSinPintar() && !band2)
     {
         CVertice vert_mge = getNodoDeMayorGradoDeErrorSinPintar();
         if (vert_mge != null)
         {
             int color = -1;
             if (hayColorDisponibeNColores(vert_mge, ref color) && color != -1)
             {
                 pintaNodo4Colores(vert_mge, color);
                 coloreoDeGrafoNColores(tp);
             }
             else
             {
                 band2 = true;
                 MessageBox.Show("\n El Grafo " + G.getId().ToString() + " ha sobrepasado el limite de colores disponible (10)...",
                                 "Número cromatico arbitrario!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
             }
         }
     }
 }
コード例 #23
0
 public void clasificaArcos(bool ramp)
 {
     foreach (CArista a in G.getListaAristas())
     {
         if (G.getTipo() == DIRIGIDO)
         {
             if (!arcos_arbol.Contains(a)) //Si no es arco de arbol
             {
                 CVertice u = a.getVOrigen(), v = a.getVDestino();
                 if (u.getNumero() >= v.getNumero() && esXDescendienteDeY(u, v))          //Si es arco de retroceso
                 {
                     arcos_retroceso.Add(a);
                 }
                 else if ((u.getNumero() <= v.getNumero() && esXDescendienteDeY(v, u)))    //Si es arco de avance
                 {
                     arcos_avance.Add(a);
                 }
                 else
                 {
                     arcos_cruzados.Add(a);                                              //Entonces es arco cruzado
                 }
             }
         }
         else
         {
             if (!arcos_arbol.Contains(a))
             {
                 if (ramp)
                 {
                     arcos_cruzados.Add(a);
                 }
                 else
                 {
                     arcos_retroceso.Add(a);
                 }
             }
         }
     }
 }
コード例 #24
0
        public void coloreoDeGrafo4Colores(TabPage tp)
        {
            if (hayNodoSinPintar() && !band)
            {
                CVertice vert_mge = getNodoDeMayorGradoDeErrorSinPintar();
                if (vert_mge != null)
                {
                    int color = -1;
                    if (hayColorDisponibe(vert_mge, ref color) && color != -1)
                    {
                        pintaNodo4Colores(vert_mge, color);
                    }
                    else
                    {
                        if (vert_mge.getVecinos().Count != G.getNumeroVertices() - 1)
                        {
                            vert_mge.aumentaGE();
                            despintarNodosAdyacentesA(vert_mge);
                        }
                        else
                        {
                            band = true;
                        }
                    }

                    coloreoDeGrafo4Colores(tp);
                }
            }
            else
            {
                if (hayNodoSinPintar())
                {
                    coloreoDeGrafoNColores(tp);
                }

                G.dibujate(tp, G.getBMP());
            }
        }
コード例 #25
0
        public bool hayColorDisponibeNColores(CVertice vertice, ref int color)
        {
            bool band = false;
            for (int colori = AZUL; colori < NEGRO; colori++)
            {
                if (!hayVecinoConColor(vertice, colori))
                {
                    color = colori;
                    band = true;
                    break;
                }
            }

            return band;
        }
コード例 #26
0
ファイル: CArista.cs プロジェクト: jluisacosta/Graph-Editor
 public void setVDestino(CVertice de)
 {
     destino = de;
 }
コード例 #27
0
        public void pintaNodo4Colores(CVertice vertice,int color_asignado)
        {
            if (num_cromatico < (color_asignado + 1))
                num_cromatico++;

            vertice.setRelleno(colores[color_asignado].ToArgb());
            vertice.setPintado(true);
        }
コード例 #28
0
        public bool hayVecinoConColor(CVertice vertice, int color)
        {
            foreach (CVertice vecino in vertice.getVecinos())
            {
                if (vecino.estaPintado())
                {
                    if (vecino.getArgbRelleno() == colores[color].ToArgb())
                        return true;
                }
            }

            return false;
        }
コード例 #29
0
ファイル: CArista.cs プロジェクト: jluisacosta/Graph-Editor
 public void setVDestino(CVertice de)
 {
     destino = de;
 }
コード例 #30
0
ファイル: CArista.cs プロジェクト: jluisacosta/Graph-Editor
 public void setVOrigen(CVertice or)
 {
     origen = or;
 }
コード例 #31
0
 //Constructor
 public CNodoVertice(CVertice vert)
 {
     vertice    = vert;
     relaciones = new List <CNodoVertice>();
 }
コード例 #32
0
        public bool esElUltimoEnPintar(CVertice v)
        {
            foreach (CNodoVertice cnv in G.getListaAdyacencia())
            {
                if (cnv.getVertice().getId() != v.getId() && !v.estaPintado())
                    return false;
            }

            return true;
        }
コード例 #33
0
        public void pintaNodoNColores(CVertice vertice)
        {
            int color_asignado = AZUL;

            foreach (CVertice vecino in vertice.getVecinos())
            {
                if (vecino.estaPintado())
                {
                    if (vecino.getArgbRelleno() == colores[color_asignado].ToArgb())
                    {
                        if (color_asignado != NEGRO)
                        {
                            color_asignado++;
                        }
                    }
                }
            }

            vertice.setRelleno(colores[color_asignado].ToArgb());
            vertice.setPintado(true);
        }
コード例 #34
0
 public bool esXDescendienteDeY(CVertice X, CVertice Y)
 {
     if( Y.getNumero() <= X.getNumero()
         && X.getNumero() <= (Y.getNumero() + descendientes[G.getListaAdyacencia().IndexOf(G.buscaNodoVertice(Y))]))
     {
         return true;
     }
     return false;
 }
コード例 #35
0
 public void enlistaArcosArbol(CVertice origen, CVertice destino)
 {
     foreach (CArista a in G.getListaAristas())
     {
         if (G.getTipo() == DIRIGIDO)
         {
             if (a.getVOrigen().getId() == origen.getId() && a.getVDestino().getId() == destino.getId())
                 arcos_arbol.Add(a);
         }
         else
         {
             if ((a.getVOrigen().getId() == origen.getId() && a.getVDestino().getId() == destino.getId()) ||
                 a.getVOrigen().getId() == destino.getId() && a.getVDestino().getId() == origen.getId())
             {
                 arcos_arbol.Add(a);
             }
         }
     }
 }
コード例 #36
0
 public void despintarNodosAdyacentesA(CVertice vertice)
 {
     foreach(CVertice v in vertice.getVecinos())
     {
         v.setRelleno(Color.LightGoldenrodYellow.ToArgb());
         v.setPintado(false);
     }
 }
コード例 #37
0
ファイル: CArista.cs プロジェクト: jluisacosta/Graph-Editor
 public void setVOrigen(CVertice or)
 {
     origen = or;
 }