static int NumAños(Relación[] lista, int N, int víctima) { LinkedList<Relación> cola = new LinkedList<Relación>(); int[] veces = Enumerable.Range(0, N).Select(x => 0).ToArray(); Relación aux; foreach(Relación x in Conjunto(lista, víctima)) { cola.AddLast(x); } veces[víctima - 1] = 1; //Console.WriteLine("V: " + veces.Select(x => x.ToString()) // .Aggregate((x, xs) => x + " " + xs)); while(cola.Count() > 0) { aux = cola.First(); cola.RemoveFirst(); veces[aux.necesita - 1] = veces[aux.asignatura - 1] + 1; //Console.WriteLine("Asig: " + aux.asignatura + " Nece: " + aux.necesita); //Console.WriteLine("V: " + veces.Select(x => x.ToString()) // .Aggregate((x, xs) => x + " " + xs)); foreach(Relación x in Conjunto(lista, aux.necesita)) { cola.AddLast(x); } } return veces.Max(); }
static IEnumerable<Relación> Conjunto(Relación[] lista, int v) { return lista.Where(x => x.asignatura == v); }