Example #1
0
        public override List<KeyValuePair<int, int>> Solve()
        {
            List<KeyValuePair<int, int>> result = new List<KeyValuePair<int, int>>();
            GenColumnValues();
            GenRowValues();

            RemoveEmptyRows();
            _columnIndexes = _columnIndexes.AsParallel()
                .OrderBy(i => GetColumnValue(i))
                .ToList();

            states = new List<State>();
            State state = new State();
            states.Add(state);
            Random rnd = new Random(15);
            while (!Empty())
            {
                State state2 = state.Clone();

                int column;
                int row = GetBestRow(out column);

                state.AddRow(row, GetRowValue(row));
                states.Add(state);

                row = GetBest2Row(out column);

                state2.AddRow(row, GetRowValue(row));
                states.Add(state2);

                state = states.OrderByDescending(x => x.Value *(float)(0.75 + 0.25 * rnd.NextDouble())).First();
                states.Remove(state);
                LoadState(state);
            }

            result = state.Rows.Select(x => new KeyValuePair<int, int>(x, 0)).ToList();
            //while (!Empty())
            //{
            //    int column;
            //    int row = GetSyndromRow(out column);

            //    KeyValuePair<int, int> syndromElement = new KeyValuePair<int, int>(row, column);
            //    result.Add(syndromElement);
            //}
            return result;
        }