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); while (q.Count() != 0) { Node <Puzzle> temp = q.Peek(); Node <Puzzle> node = null; int dife = 0; q.Dequeue(); // allVisited.Add(temp.Value); if (repoPuzzle.isGoal(temp.Value)) { return(allVisited); } NTree <Puzzle>[] noduri = repoPuzzle.construireTree(temp.Value); if (temp.ChildrensCount == 0 && noduri.Count() != 0) { if (noduri.Count() != 0) { NTree <Puzzle> temporar = new NTree <Puzzle>(temp.Value, noduri); temp.Childrens = temporar.root.Childrens; foreach (var el in temporar.root.Childrens) { int auxD = repoPuzzle.checkDiferences(el.Value); auxD = auxD + el.ChildrensCount; if (auxD > dife) { node = el; dife = auxD; } } if (node != null) { q.Enqueue(node); } } } // else { foreach (var va1 in temp.Childrens) { q.Enqueue(va1); } } } return(null); }
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); }