public double GetExces(Retea retea)
        {
            List <Arc> arceIntra = retea.Arce.Where(a => a.Y.Id == Id).ToList();
            List <Arc> arceIes   = retea.Arce.Where(a => a.X.Id == Id).ToList();

            double exces = arceIntra.Sum(a => a.Flux) - arceIes.Sum(a => a.Flux);

            return(exces);
        }
        public string AsString(Retea retea)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine();
            sb.Append("Drum: ");

            Arce.ForEach(a => sb.Append($"{a.ToString()}, "));

            return(sb.ToString());
        }
        public double GetCapacitateRezidualaMin(Retea retea)
        {
            IEnumerable <Arc> arce = Arce.Where(arc => arc.GetCapacitateReziduala(retea) > 0);

            if (arce.Count() == 0)
            {
                return(-1);
            }

            return(arce.Min(arc => arc.GetCapacitateReziduala(retea)));
        }
        private void SetArce(Retea retea)
        {
            for (int index = 0; index < Noduri.Count - 1; index++)
            {
                Arc arc = retea.Arce.FirstOrDefault(a => a.X.Id == Noduri[index].Id && a.Y.Id == Noduri[index + 1].Id);

                if (arc == null)
                {
                    throw new InvalidOperationException($"Nu exista arc intre nodul {Noduri[index].Id} si {Noduri[index + 1].Id}");
                }

                Arce.Add(arc);
            }
        }
        public double GetCapacitateReziduala(Retea retea)
        {
            Arc arcInvers = retea.Arce.FirstOrDefault(arc => arc.X.Id == Y.Id && arc.Y.Id == X.Id);

            if (arcInvers == null)
            {
                arcInvers = new Arc {
                    X          = Y,
                    Y          = X,
                    Capacitate = 0,
                    Flux       = 0
                };
            }

            return(Capacitate - Flux + arcInvers.Flux);
        }
 public Drum(Retea retea, List <Nod> noduri)
 {
     Noduri = noduri;
     SetArce(retea);
 }
 public Retea(Retea retea)
 {
     Noduri = new List <Nod>(retea.Noduri);
     Arce   = new List <Arc>(retea.Arce);
 }
 internal string AsString(Retea retea)
 {
     return($"({X}) -------- f={Flux}, c={Capacitate}, r={GetCapacitateReziduala(retea)} -----------> ({Y})\n");
 }
 public bool EsteAdmisibil(Retea retea)
 {
     return(GetCapacitateReziduala(retea) > 0 && X.Distanta - Y.Distanta == 1);
 }