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(); } }
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); }