示例#1
0
		public IEnumerable<TElement> TopologicalSort<TElement, TKey>(
			IList<TElement> elements,
			Func<TElement, TKey> selector, IPartialComparer<TKey> comparer
			)
		{
			var search = new DepthFirstSearch<TElement, TKey>(
				elements,
				selector,
				comparer
				);
			return search.VisitAll();
		}
示例#2
0
		public IEnumerable<TElement> TopologicalSort<TElement>(
			IList<TElement> elements,
			IPartialComparer<TElement> comparer
			)
		{
			var search = new DepthFirstSearch<TElement, TElement>(
				elements,
				element => element,
				comparer
				);
			return search.VisitAll();
		}
示例#3
0
			public DepthFirstSearch(
				IList<TElement> elements,
				Func<TElement, TKey> selector,
				IPartialComparer<TKey> comparer
				)
			{
				_elements = elements;
				_selector = selector;
				_comparer = comparer;
				var referenceComparer = new ReferenceEqualityComparer<TElement>();
				_visited = new HashSet<TElement>(referenceComparer);
				_keys = elements.ToDictionary(
					e => e,
					e => _selector(e),
					referenceComparer
					);
				_sorted = new List<TElement>();
			}