public Path getPath(int a_origin, int a_destination)
    {
        Path shortestP = getShortestPath(a_origin, a_destination);
        if(shortestP != null && shortestP.m_cost != Double.MAX_VALUE)
        {
            //The path was there.
            return shortestP;
        }

        //No path, need to calculate with A*
        Path p = new Path(a_origin, a_destination);
        Path empty = new Path(a_origin, a_origin);

        boolean pathFound = _a_star(p);

        if(!pathFound)
        {
            //If path could not be found, clear it
            p.m_points.clear();
        }
        else
        {
            //Else, extract the path
            p = getShortestPath(a_origin,a_destination);
        }

        //Return the path if it is meaningful.
        if (p.m_points.size() > 0 && p.m_cost < Integer.MAX_VALUE)
            return p;
        else return empty;
    }