/// <summary>
        /// 搜索路径
        /// </summary>
        private bool SearchBaseBinaryHeap(SimpleAStarNode startNode, SimpleAStarNode endNode, int nowCheckNum)
        {
            /**已进入关闭列表(从openList中移除即进入关闭列表)*/
            int STATUS_CLOSED = nowCheckNum + 1;

            mBinaryHeapUtils.Reset();

            startNode.g = 0;
            startNode.f = startNode.g + mAStarHeuristic.Heuristic(startNode.mNodeX, startNode.mNodeY, endNode.mNodeX, endNode.mNodeY);
            startNode.mSearchPathCheckNum = STATUS_CLOSED;

            int             g       = 0;
            SimpleAStarNode node    = startNode;
            SimpleAStarNode tmpNode = null;

            while (node != endNode)
            {
                IList <SimpleAStarLinkNode> linkNodes = node.mLinks;
                for (int i = 0; i < linkNodes.Count; ++i)
                {
                    tmpNode = linkNodes[i].mNode;
                    if (tmpNode == null)
                    {
                        continue;
                    }
                    g = node.g + linkNodes[i].mCost;

                    // 如果已被检查过
                    if (tmpNode.mSearchPathCheckNum >= nowCheckNum)
                    {
                        if (tmpNode.g > g)
                        {
                            tmpNode.f           = g + mAStarHeuristic.Heuristic(tmpNode.mNodeX, tmpNode.mNodeY, endNode.mNodeX, endNode.mNodeY);
                            tmpNode.g           = g;
                            tmpNode.mParentNode = node;
                            if (tmpNode.mSearchPathCheckNum == nowCheckNum)
                            {
                                mBinaryHeapUtils.ModifyNode(tmpNode.mBinaryHeapNode);
                            }
                        }
                    }
                    else
                    {
                        tmpNode.f           = g + mAStarHeuristic.Heuristic(tmpNode.mNodeX, tmpNode.mNodeY, endNode.mNodeX, endNode.mNodeY);
                        tmpNode.g           = g;
                        tmpNode.mParentNode = node;

                        tmpNode.mBinaryHeapNode     = mBinaryHeapUtils.InsertNode(tmpNode);
                        tmpNode.mSearchPathCheckNum = nowCheckNum;
                    }
                }
                if (mBinaryHeapUtils.headNode != null)
                {
                    node = mBinaryHeapUtils.PopNode();
                    node.mSearchPathCheckNum = STATUS_CLOSED;
                }
                else
                {
                    return(false);
                }
            }
            return(true);
        }