Exemple #1
0
        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);
        }
Exemple #2
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();
 }