示例#1
0
文件: 7.cs 项目: qifanyyy/CLCDSA
        public Solution SolveBrute(char[,] board)
        {
            var changes = board.ToPoints().Where(p => board.Get(p) != 'o')
                          .Select(p => (board.Get(p) == '.' ? ".+xo" : board.Get(p) == 'o' ? "o" : (board.Get(p) + "o")).Select(c => new { c, p }).ToArray())
                          .ToArray();

            var bestScore  = 0;
            var bestBoards = new List <char[, ]>();

            foreach (var comb in CombinatoricsHelper.Selections(changes))
            {
                var resultBoard = board.ShallowClone();

                foreach (var change in comb)
                {
                    resultBoard.Set(change.p, change.c);
                }

                if (!IsBoardOk(resultBoard))
                {
                    continue;
                }

                var score = Score(resultBoard);

                if (score > bestScore)
                {
                    bestScore = score;
                    bestBoards.Clear();
                    bestBoards.Add(resultBoard);
                }
                else if (score == bestScore)
                {
                    bestBoards.Add(resultBoard);
                }
            }

            return(new Solution {
                Score = bestScore, Board = bestBoards.Count == 0 ? null : bestBoards[0]
            });
        }