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 List <int> GetShortestPath(int from, int to) { var result = new List <int>(); while (to != from) { //No Path Check if (to == SearchData.NOT_VISITED) { return(new List <int>()); } result.Add(to); to = _visitedFrom.GetValue(to); } result.Reverse(); return(result); }
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); } } }