public override List <Puzzle> search(Puzzle puzzle) { NTree <Puzzle> tree = new NTree <Puzzle>(puzzle, repoPuzzle.construireTree(puzzle)); var allVisited = new List <Puzzle>(); Queue <Node <Puzzle> > q = new Queue <Node <Puzzle> >(); q.Enqueue(tree.root); foreach (var aux in tree.root.Childrens) { q.Enqueue(aux); } int i = 0; while (q.Count() != 0) { i++; Node <Puzzle> temp = q.Peek(); q.Dequeue(); allVisited.Add(temp.Value); if (repoPuzzle.isGoal(temp.Value)) { return(allVisited); } NTree <Puzzle>[] noduri = repoPuzzle.construireTree(temp.Value); //foreach (var va1 in temp.Childrens) //q.Enqueue(va1); if (noduri != null) { NTree <Puzzle> temporar = new NTree <Puzzle>(temp.Value, noduri); temp.Childrens = temporar.root.Childrens; foreach (var aux in temporar.root.Childrens) { q.Enqueue(aux); } } } tree.TraverseDFS(); Console.WriteLine("\n"); Console.WriteLine(i); return(null); }