override public bool FindPath(Node startNode, Node goalNode, PathFinding_Heuristics heursiticFunction, ref Dictionary <Node, Node_Data> nodeData, int maxGridSize) { BinaryHeap <Node_Data> openSet = new BinaryHeap <Node_Data>(maxGridSize); nodeData[startNode] = new Node_Data(startNode); openSet.Add(nodeData[startNode]); Node curNode; do { curNode = openSet.RemoveFirst().node; nodeData[curNode].inClosedSet = true; nodeData[curNode].inOpenSet = false; foreach (Node node in curNode.adjacentNodes) { if (!nodeData.ContainsKey(node)) { nodeData[node] = new Node_Data(node); } if (!nodeData[node].inClosedSet) { nodeData[node].parentNode = curNode; if (!nodeData[node].inOpenSet) { nodeData[node].inOpenSet = true; nodeData[node].hCost = heursiticFunction.GetHCost(node, goalNode); openSet.Add(nodeData[node]); } } } if (openSet.Count == 0) { break; } } while (curNode != goalNode); return((curNode == goalNode) ? true : false); }
override public bool FindPath(Node startNode, Node goalNode, PathFinding_Heuristics heursiticFunction, ref Dictionary <Node, Node_Data> nodeData, int maxGridSize) { bool pathFound = false; Queue nodeQueue = new Queue(); nodeQueue.Enqueue(startNode); while (nodeQueue.Count > 0) { Node curNode = (Node)nodeQueue.Dequeue(); if (curNode == goalNode) { pathFound = true; break; } foreach (Node node in curNode.adjacentNodes) { if (!nodeData.ContainsKey(node)) { nodeData[node] = new Node_Data(node); } Node parent = nodeData[node].parentNode; if (parent == null && node != startNode) { nodeData[node].parentNode = curNode; nodeQueue.Enqueue(node); } } } return(pathFound); }