public HierarchicalMap CreateHierarchicalMap(ConcreteMap concreteMap, int clusterSize, int maxLevel)
    {
        m_concreteMap     = concreteMap;
        m_clusterSize     = clusterSize;
        m_maxLevel        = maxLevel;
        m_hierarchicalMap = new HierarchicalMap(concreteMap, clusterSize, maxLevel);

        List <Cluster>  clusters  = new List <Cluster>();
        List <Entrance> entrances = new List <Entrance>();

        CreateClustersAndEntrances(clusters, entrances);
        m_hierarchicalMap.InitClusters(clusters);

        CreateAbstractNodes(entrances);
        CreateEdges(clusters, entrances);

        return(m_hierarchicalMap);
    }