public override SuggestedMoves ChooseColor(Color[,] board) { MapNode head = MapBuilder.BuildMap(board); ISet <MapNode> firstLayer = head.GetNeighbors(); List <Color> possibleColorsToClear = firstLayer.Select(node => node.Color).ToList(); IEnumerator <MapNode> breathFirstSearch = head.BFS().GetEnumerator(); while (breathFirstSearch.MoveNext() && possibleColorsToClear.Count > 0) { MapNode currentNode = breathFirstSearch.Current; if (!firstLayer.Contains(currentNode)) { //can't wipe out that color, it is behind the first layer possibleColorsToClear.Remove(currentNode.Color); } } SuggestedMove move = new SuggestedMove(possibleColorsToClear); SuggestedMoves moves = new SuggestedMoves(); moves.AddFirst(move); return(moves); }