Beispiel #1
0
        public void RecorridoAnchura(Vertice a)
        {
            var alcanzados = new List <Alcanzados>();
            var alc        = new Alcanzados();

            int[]    d     = new int[ListaVertices.Count];
            int[]    pi    = new int[ListaVertices.Count];
            Colors[] visit = new Colors[ListaVertices.Count];
            for (int i = 0; i < ListaVertices.Count; i++)
            {
                visit[i] = Colors.White;
            }

            int pos = ListaVertices.IndexOf(a);

            visit[pos] = Colors.Grey;
            d[pos]     = 0;

            Queue <int> q = new Queue <int>();

            q.Enqueue(pos);

            while (q.Count != 0)
            {
                int tmp = q.Dequeue();
                foreach (var v in ListaVertices[tmp].AdyLista)
                {
                    if (ValorDelSigno(ListaVertices[tmp], ListaVertices[v.Pos], v))
                    {
                        if (visit[v.Pos] == Colors.White)
                        {
                            alc.name = ListaVertices[v.Pos].Nombre;
                            alc.sgn  = ListaVertices[v.Pos].signo;
                            alcanzados.Add(alc);
                            visit[v.Pos] = Colors.Grey;
                            d[v.Pos]     = d[tmp] + 1;
                            pi[v.Pos]    = tmp;
                            q.Enqueue(v.Pos);
                        }
                    }
                }
                visit[tmp] = Colors.Black;
            }
            if (a.Signo != 0)
            {
                Console.WriteLine();

                Console.WriteLine("La falla en la variable " + a.Nombre + " con signo : " + a.signo + " se propaga a las variables:");

                for (int i = 0; i < alcanzados.Count; i++)
                {
                    if (alcanzados[i].sgn != 0)
                    {
                        Console.WriteLine("=> " + alcanzados[i].name + " con signo " + alcanzados[i].sgn);
                    }
                }
            }
        }
Beispiel #2
0
 public void AgregarVertice(Vertice a)
 {
     if (GrafoCount < ListaVertices.Count)
     {
         for (int i = 0; i < ListaVertices.Count; i++)
         {
             if (ListaVertices[i] == null)
             {
                 ListaVertices[i] = new Vertice(a.Nombre, a.LimInferior, a.LimSuperior, a.Valor);
                 GrafoCount++;
                 break;
             }
         }
     }
     else
     {
         ListaVertices.Add(new Vertice(a.Nombre, a.LimInferior, a.LimSuperior, a.Valor));
         GrafoCount++;
     }
 }