예제 #1
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);
         }
     }
 }
예제 #2
0
 public CWarshall(CGrafo grafo)
 {
     G = grafo;
     n = grafo.getNumeroVertices();
     C = G.getMatrizAdyacencia().getMatriz();
     D = new bool[n, n];
 }
예제 #3
0
 public CDijkstra(CGrafo grafo)
 {
     G = grafo;
     n = grafo.getNumeroVertices();
     V = grafo.getListaAdyacencia();
     C = construyeC();
 }
예제 #4
0
 public CDijkstra(CGrafo grafo)
 {
     G = grafo;
     n = grafo.getNumeroVertices();
     V = grafo.getListaAdyacencia();
     C = construyeC();
 }
예제 #5
0
 public CWarshall(CGrafo grafo)
 {
     G = grafo;
     n = grafo.getNumeroVertices();
     C = G.getMatrizAdyacencia().getMatriz();
     D = new bool[n, n];
 }
예제 #6
0
 public CFloyd(CGrafo grafo)
 {
     G = grafo;
     n = grafo.getNumeroVertices();
     V = grafo.getListaAdyacencia();
     C = construyeC();
     P = new int[n, n];
     D = new int[n, n];
 }
예제 #7
0
 public CFloyd(CGrafo grafo)
 {
     G = grafo;
     n = grafo.getNumeroVertices();
     V = grafo.getListaAdyacencia();
     C = construyeC();
     P = new int[n, n];
     D = new int[n, n];
 }
예제 #8
0
        public bool mismosNVyNA(CGrafo G, CGrafo H)
        {
            bool iguales = false;

            if (G.getNumeroAristas() == H.getNumeroAristas() && G.getNumeroVertices() == H.getNumeroVertices())
            {
                iguales = true;
            }

            return(iguales);
        }
예제 #9
0
        public void kruskal()
        {
            Graphics g = Graphics.FromImage(G.getBMP());

            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            int             n  = G.getNumeroVertices();
            CArista         uv = null;
            List <CVertice> cv = null;
            List <CVertice> cu = null;

            foreach (CNodoVertice cnv in V)
            {
                List <CVertice> C = new List <CVertice>();
                C.Add(cnv.getVertice());
                componentes.Add(C);
            }

            while (T.Count <= (n - 1) && Q.Count != 0)
            {
                uv = Q[0];
                Q.RemoveAt(0);
                cv = componenteQueContiene(uv.getVDestino());
                cu = componenteQueContiene(uv.getVOrigen());
                if (!cvIgualcu(cv, cu))
                {
                    T.Add(uv);
                    foreach (CVertice v in cu)
                    {
                        cv.Add(v);
                    }
                    cu.Clear();
                }
            }

            T.Sort(comparaArista);
            string cad = " Conjunto de Aristas\n\n T : {";

            foreach (CArista a in T)
            {
                a.dibujateAACM(g, G.getBMP(), tp);
                cad += " (" + a.getVOrigen().getId().ToString() + "," + a.getVDestino().getId().ToString() + ") ";
            }
            cad += "}.    ";

            MessageBox.Show(cad, "Árbol Abarcador de Costo Mínimo (Algoritmo de KRUSKAL)", MessageBoxButtons.OK, MessageBoxIcon.Information);

            g.Clear(Color.White);
            G.dibujate(tp, G.getBMP());
        }
예제 #10
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());
            }
        }
예제 #11
0
        public bool mismosNVyNA(CGrafo G,CGrafo H)
        {
            bool iguales = false;
            if (G.getNumeroAristas() == H.getNumeroAristas() && G.getNumeroVertices() == H.getNumeroVertices())
                iguales = true;

            return iguales;
        }