Exemplo n.º 1
0
    public void Traverse(GridItem root, GridItem goal)
    {
        Queue <GridItem> traverseOrder = new Queue <GridItem>();
        List <GridItem>  order         = new List <GridItem> ();

        Queue <GridItem>   Q = new Queue <GridItem>();
        HashSet <GridItem> S = new HashSet <GridItem>();

        Q.Enqueue(root);
        S.Add(root);

        while (Q.Count > 0)
        {
            GridItem e = Q.Dequeue();
            traverseOrder.Enqueue(e);
            order.Add(e);


            foreach (GridItem emp in e.GetNeighbours())
            {
                int x = (int)emp.GetGridPos().x;
                int y = (int)emp.GetGridPos().y;

                if (emp == goal)
                {
//					gridItems [x, y].SetPathFromParent (e.GetPath());
                    gridItems [x, y].AddParentInPath(e);
                    break;
                }
                else
                {
                    if (!S.Contains(emp) && emp.IsPassable() && !AlreadyVisited(emp, order))
                    {
                        Q.Enqueue(emp);
                        S.Add(emp);

//						gridItems [x, y].SetPathFromParent (e.GetPath());
                        gridItems [x, y].AddParentInPath(e);
                    }
                }
            }
        }

        while (traverseOrder.Count > 0)
        {
            GridItem e = traverseOrder.Dequeue();
        }
    }
Exemplo n.º 2
0
    bool GetReachableItems(GridItem start, GridItem target)
    {
        var neighbours = start.GetNeighbours();


        foreach (var neighbour in neighbours)
        {
            if (neighbour == target)
            {
                reachableItems.Add(neighbour);
                return(true);
            }

            if (neighbour.IsPassable() && !reachableItems.Contains(neighbour))
            {
                reachableItems.Add(neighbour);
                GetReachableItems(neighbour, target);
            }
        }

        return(false);
    }