private static void ClusterAccToAlignment(ref Dictionary <SurfaceBasicInfo, int> _processed, List <SurfaceBasicInfo> _surfaces)
        {
            if (_surfaces == null || _surfaces.Count == 0)
            {
                return;
            }
            if (_processed == null || _processed.Count == 0)
            {
                _processed = NeighborhoodGraph.ClusterAccToAlignment(_surfaces);
                return;
            }

            // initiate
            int cluster_counter = _processed.Select(x => x.Value).Max() + 1;

            foreach (SurfaceBasicInfo s in _surfaces)
            {
                _processed.Add(s, -1);
            }

            NeighborhoodGraph.ClusterAccToAlignmentAlgorithm(ref _processed, ref cluster_counter);
        }
        private static Dictionary <SurfaceBasicInfo, int> ClusterAccToAlignment(List <SurfaceBasicInfo> _surfaces)
        {
            Dictionary <SurfaceBasicInfo, int> processed = new Dictionary <SurfaceBasicInfo, int>();

            if (_surfaces == null || _surfaces.Count == 0)
            {
                return(processed);
            }

            foreach (SurfaceBasicInfo s in _surfaces)
            {
                processed.Add(s, -1);
            }

            SurfaceBasicInfo s1 = processed.ElementAt(0).Key;

            processed[s1] = 0;
            int cluster_counter = 1;

            NeighborhoodGraph.ClusterAccToAlignmentAlgorithm(ref processed, ref cluster_counter);
            return(processed);
        }