示例#1
0
 private void importSolvesFullBruteforce(int tableSize, Bruteforce solver)
 {
     solves              = solver.solves;
     this.tableSize      = tableSize;
     this.countOfSolves  = solves.Length;
     stateToView.Content = string.Format("{0}/{1}", 1, solves.Length);
 }
示例#2
0
        private void showSolveBrutforce(IAsyncResult resObj)
        {
            Dispatcher.Invoke(() =>
            {
                grid.Children.Clear();
                grid.Background   = new SolidColorBrush(Colors.DarkGray);
                currentSolve      = 0;
                Bruteforce solver = ((Tuple <Bruteforce, int>)resObj.AsyncState).Item1;
                int tableSize     = ((Tuple <Bruteforce, int>)resObj.AsyncState).Item2;

                this.tableSize = tableSize;
                importSolvesFullBruteforce(tableSize, solver);

                Grid newTable = newTable = createTable(tableSize);
                newTable.SetValue(Grid.RowProperty, 1);
                newTable.SetValue(Grid.ColumnProperty, 1);

                if (solves.Length > 0)
                {
                    for (int i = 0; i < tableSize; i++)
                    {
                        for (int j = 0; j < tableSize; j++)
                        {
                            if (solves[currentSolve][i * tableSize + j] == '1')
                            {
                                setCell(newTable, i, j);
                            }
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Решений не найдено");
                }
                grid.Children.Add(newTable);
                deleteLoandingAnimation();
            });
        }
示例#3
0
        private void Button_Click_Go(object sender, RoutedEventArgs e)
        {
            if (proc != null)
            {
                if (!proc.HasExited)
                {
                    proc.Kill();
                }
            }
            showLoandingAnimation();

            int tableSize;

            if (int.TryParse(viewTableSize.Text, out tableSize))
            {
                if (tableSize == 2 && currentTactic < 3)
                {
                    solves             = new string[4];
                    solves[0]          = "0001";
                    solves[1]          = "0010";
                    solves[2]          = "0100";
                    solves[3]          = "1000";
                    this.tableSize     = tableSize;
                    this.countOfSolves = solves.Length;
                    showSolveBrutforce(0, 2);
                    Dispatcher.Invoke(() =>
                    {
                        deleteLoandingAnimation();
                        stateToView.Content = string.Format("{0}/{1}", 1, solves.Length);
                    });
                    return;
                }
                if (tableSize == 3 && currentTactic < 3)
                {
                    solves             = new string[8];
                    solves[0]          = "100000010";
                    solves[1]          = "100001000";
                    solves[2]          = "010000100";
                    solves[3]          = "010000001";
                    solves[4]          = "001100000";
                    solves[5]          = "001000010";
                    solves[6]          = "000100001";
                    solves[7]          = "000001100";
                    this.tableSize     = tableSize;
                    this.countOfSolves = solves.Length;
                    showSolveBrutforce(0, 3);
                    Dispatcher.Invoke(() =>
                    {
                        deleteLoandingAnimation();
                        stateToView.Content = string.Format("{0}/{1}", 1, solves.Length);
                    });
                    return;
                }
                if (currentTactic == 0)
                {
                    int       firstSolve = 0;
                    BDDSolver solver     = new BDDSolver();
                    proc = solver.proccess(tableSize);
                    WaitToEndOfProccess waitToEndOfProccess = checkProccessIsEndCUDD;
                    waitToEndOfProccess.BeginInvoke(tableSize, new AsyncCallback(showSolveCUDD), new Tuple <int, int>(firstSolve, tableSize));
                }
                if (currentTactic == 1)
                {
                    Bruteforce          solver = new Bruteforce();
                    WaitToEndOfProccess waitToEndOfProccess = solver.initSolvesFullBrutforce;
                    waitToEndOfProccess.BeginInvoke(tableSize, new AsyncCallback(showSolveBrutforce), new Tuple <Bruteforce, int>(solver, tableSize));
                }
                if (currentTactic == 2)
                {
                    Bruteforce          solver = new Bruteforce();
                    WaitToEndOfProccess waitToEndOfProccess = solver.initSolvesOptimizeBrutforce;
                    waitToEndOfProccess.BeginInvoke(tableSize, new AsyncCallback(showSolveBrutforce), new Tuple <Bruteforce, int>(solver, tableSize));
                }
            }
            else
            {
                MessageBox.Show("Введен неверный размер доски");
            }
        }