public List <Node> Run(List <List <Node> > grid, Node startNode, Node finishNode) { startNode.Distance = 0; List <Node> visitedNodesInOrder = new List <Node>(); ClosedSet.Add(startNode); startNode.IsVisited = true; UpdateUnvisitedNeighbors(startNode, finishNode, grid); while (true) { Node bestNode; try { bestNode = OpenSet.Dequeue(); } catch (Exception e) { return(visitedNodesInOrder); // Set is empty } bestNode.IsVisited = true; if (bestNode.IsWall) { continue; } visitedNodesInOrder.Add(bestNode); if (bestNode.IsFinish == true || bestNode.IsBomb == true) { return(visitedNodesInOrder); } UpdateUnvisitedNeighbors(bestNode, finishNode, grid); } }