double heuristicEstimation(int i, int j) throws Exception {
            if (BitmapGraph.this.destI_pos == -1 || BitmapGraph.this.destJ_pos == -1) {
                throw new Exception("heuristicEstimation failed! End point is not found!!");
            }
            //return 15*Math.sqrt(pow2(BitmapGraph.this.destI_pos - i) + pow2(BitmapGraph.this.destJ_pos - j));
            //return 10*Math.abs(BitmapGraph.this.destI_pos - i) + Math.abs(BitmapGraph.this.destJ_pos - j);
            int distanceX = Math.abs(BitmapGraph.this.destI_pos - i);
            int distanceY = Math.abs(BitmapGraph.this.destJ_pos - j);
            int max = (distanceX > distanceY ? distanceX : distanceY);
            int min = (distanceX > distanceY ? distanceY : distanceX);
            return 15*min + 10*(max-min);
        }