Ejemplo n.º 1
0
        public List <Puzzle> BFS()
        {
            var visited = new List <Puzzle>();

            //if ()
            // return visited;

            Queue <Node <Puzzle> > q = new Queue <Node <Puzzle> >();

            q.Enqueue(repo.insert().root);
            while (q.Count != 0)
            {
                var nod = q.Dequeue();
                visited.Add(nod.Value);
                if (repo.isGoal(nod.Value))
                {
                    return(visited);
                }
                foreach (var el in nod.Childrens)
                {
                    q.Enqueue(el);
                }
            }
            return(visited);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }