public void AStar() { Node tempNode = new Node(); Node temp = new Node(); currentNode = this.getStartNode(); openDic.Add(currentNode.getKey(), currentNode); do { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { tempNode.X = currentNode.X + i - 1; tempNode.Y = currentNode.Y + j - 1; if (!obstancleDic.ContainsKey(tempNode.getKey()) && !clostDic.ContainsKey(tempNode.getKey()) && tempNode.X >= 0 && tempNode.X <= Matrix.x && tempNode.Y >= 0 && tempNode.Y <= Matrix.y && (i != 1 || j != 1)) { if (openDic.TryGetValue(tempNode.getKey(), out temp)) { int gF = temp.getG(temp.getFather()); int gC = temp.getG(currentNode); if (gF > gC) { temp.setFather(currentNode); } } else { tempNode.setFather(currentNode); openDic.Add(tempNode.getKey(), tempNode); } tempNode = new Node(); } } } openDic.Remove(currentNode.getKey()); clostDic.Add(currentNode.getKey(), currentNode); currentNode = this.getMinNode(openDic, this.getEndNode()); } while (!clostDic.ContainsKey(this.getEndNode().getKey()) && openDic.Count != 0); }
static void Main(string[] args) { //地图 matrix Matrix = new matrix(7, 3); //开始点 Node startNode = new Node(2,2,0,new Node()); //结束点 Node endNode = new Node(6, 2, 0, new Node()); //阻挡点 Node obstalNode1 = new Node(4, 1, 0, new Node()); Node obstalNode2 = new Node(4, 2, 0, new Node()); Node obstalNode3 = new Node(4, 3, 0, new Node()); Dictionary<string, Node> obstalDic = new Dictionary<string,Node>(); obstalDic.Add(obstalNode1.getKey(), obstalNode1); obstalDic.Add(obstalNode2.getKey(), obstalNode1); obstalDic.Add(obstalNode3.getKey(), obstalNode1); Astar astar = new Astar(startNode, endNode, Matrix, obstalDic); astar.AStar(); astar.getShortCutRoute(); Console.Read(); }