public SimpleAStarManager(int numCols, int numRows, bool isFourWay = false)
        {
            mNumCols   = numCols;
            mNumRows   = numRows;
            mIsFourWay = isFourWay;
            //mAStarHeuristic = new SimpleAStarManhattanHeuristic();
            mAStarHeuristic = new SimpleAStarDiagonalHeuristic();

            SimpleAStarNode node = null;

            mNodes = new Dictionary <string, SimpleAStarNode>();
            for (int i = 0; i < mNumCols; i++)
            {
                for (int j = 0; j < mNumRows; j++)
                {
                    node = new SimpleAStarNode(i, j);
                    node.AddCostMultiplierCallback(RefreshLinksOfAdjacentNodes);
                    mNodes.Add(GetNodeKey(i, j), node);
                }
            }
            RefreshLinksOfAllNodes();
            mBinaryHeapUtils = new BinaryHeapUtils(numCols * numRows / 2);
        }
        public SimpleAStarManager(int numCols, int numRows, bool isFourWay = false)
        {
            mNumCols = numCols;
            mNumRows = numRows;
            mIsFourWay = isFourWay;
            //mAStarHeuristic = new SimpleAStarManhattanHeuristic();
            mAStarHeuristic = new SimpleAStarDiagonalHeuristic();

            SimpleAStarNode node = null;
            mNodes = new Dictionary<string, SimpleAStarNode>();
            for (int i = 0; i < mNumCols; i++)
            {
                for (int j = 0; j < mNumRows; j++)
                {
                    node = new SimpleAStarNode(i, j);
                    node.AddCostMultiplierCallback(RefreshLinksOfAdjacentNodes);
                    mNodes.Add(GetNodeKey(i, j), node);
                }
            }
            RefreshLinksOfAllNodes();
            mBinaryHeapUtils = new BinaryHeapUtils(numCols * numRows / 2);
        }