private void Explore(int start) { _searchData.SetValue(start, RED); var queue = new Queue <int>(); queue.Enqueue(start); while (queue.Any()) { var current = queue.Dequeue(); var neighborColor = GetNeighborColor(current); foreach (var neighbor in _graph.Neighbors(current).Where(i => i != current)) { if (_searchData.Visited(neighbor)) { //Check Visited neighbor is the correct color if (_searchData.GetValue(neighbor) != neighborColor) { throw new NonBipartiteException(); } continue; } queue.Enqueue(neighbor); _searchData.SetValue(neighbor, neighborColor); } } }
private void Search(int start) { _searchData.SetValue(start, 0); var queue = new Queue <int>(); queue.Enqueue(start); while (queue.Any()) { var current = queue.Dequeue(); foreach (var neighbor in _graph.Neighbors(current)) { if (_searchData.Visited(neighbor)) { continue; } queue.Enqueue(neighbor); _searchData.SetValue(neighbor, _searchData.GetValue(current) + 1); _visitedFrom.SetValue(neighbor, current); } } }