コード例 #1
0
        public static void Solve()
        {
            for (; Config_matrix.Piececount < Config_matrix.L - 1; Config_matrix.Piececount++)
            {
                do
                {
                    Config_matrix.LocalDegreeCount();
                    InternalLinksCount();
                    ExternalLinksCount();
                    ConnectivityCount();
                    DeltaCount();
                } while (SwapResult.Flag);

                int[,] savearr = new int[Config_matrix.N - Config_matrix.M, Config_matrix.N - Config_matrix.M];
                for (int i = Config_matrix.M; i < Config_matrix.N; i++)
                {
                    for (int j = Config_matrix.M; j < Config_matrix.N; j++)
                    {
                        savearr[i - Config_matrix.M, j - Config_matrix.M] = Config_matrix.AdjMatrixC[i, j];
                    }
                }

                Config_matrix.N         -= Config_matrix.M;
                Config_matrix.AdjMatrixC = new int[Config_matrix.N, Config_matrix.N];

                for (int i = 0; i < Config_matrix.N; i++)
                {
                    for (int j = 0; j < Config_matrix.N; j++)
                    {
                        Config_matrix.AdjMatrixC[i, j] = savearr[i, j];
                    }
                }
            }
        }
コード例 #2
0
 private void local_degree_show()
 {
     Config_matrix.LocalDegreeCount();
     for (int i = 0; i < Config_matrix.N; i++)
     {
         adj_matrix_data_grid[adj_matrix_data_grid.ColumnCount - 2, i].Value = Config_matrix.LocalDegree[i];
     }
 }
コード例 #3
0
        private void btn_apply_changes_Click(object sender, EventArgs e)
        {
            Config_matrix.N = int.Parse(text_block_num_of_elem.Text);
            Config_matrix.L = int.Parse(text_block_num_of_blocks.Text);
            Config_matrix.M = int.Parse(text_block_num_of_elem_in_blocks.Text);
            Config_matrix.MatrixCreate();
            Config_matrix.ResultMatrixCreate();

            create_data_grid();
            for (int i = 0; i < adj_matrix_data_grid.ColumnCount; i++)
            {
                for (int j = 0; j < adj_matrix_data_grid.RowCount; j++)
                {
                    adj_matrix_data_grid[i, j].Value = 0;
                }
            }
            adj_matrix_data_grid.AllowUserToAddRows = false;
            btn_start_algorithm.Enabled             = true;
            btn_simmetry.Enabled = true;
            create_result_table();
        }
コード例 #4
0
        private void btn_start_algorithm_Click(object sender, EventArgs e)
        {
            adj_matrix_data_grid.Enabled   = false;
            adj_matrix_data_grid.ForeColor = Color.Gray;
            if (Config_matrix.Piececount >= Config_matrix.L - 1)
            {
                for (int i = 0; i < Config_matrix.M; i++)
                {
                    if (i != Config_matrix.M - 1)
                    {
                        result_table[0, Config_matrix.Piececount].Value += Config_matrix.VertexShape[i + Config_matrix.M * Config_matrix.Piececount] + "; ";
                    }
                    else
                    {
                        result_table[0, Config_matrix.Piececount].Value += Config_matrix.VertexShape[i + Config_matrix.M * Config_matrix.Piececount];
                    }
                }
                Config_matrix.InternalLinksInResultMatrixCount();
                Config_matrix.ExternalLinksInResultMatrixCount();
                btn_start_algorithm.Enabled = false;
                btn_open_result.Enabled     = true;
                return;
            }

            Algorithm.InternalLinksCount();
            Algorithm.ExternalLinksCount();
            Algorithm.ConnectivityCount();
            Algorithm.DeltaCount();
            Algorithm.SwapVertex();
            for (int i = 0; i < Config_matrix.N; i++)
            {
                for (int j = 0; j < Config_matrix.N; j++)
                {
                    adj_matrix_data_grid[j, i].Value = Config_matrix.AdjMatrixC[i, j];

                    //Config_matrix.ResultAdjMatrixC[i + Config_matrix.M * Config_matrix.Piececount,
                    //    j + Config_matrix.M * Config_matrix.Piececount] = Config_matrix.AdjMatrixC[i, j];
                }
            }

            string save = adj_matrix_data_grid.Columns[SwapResult.I].Name;

            adj_matrix_data_grid.Columns[SwapResult.I].Name = adj_matrix_data_grid.Columns[SwapResult.J + Config_matrix.M].Name;
            adj_matrix_data_grid.Columns[SwapResult.J + Config_matrix.M].Name = save;

            adj_matrix_data_grid.Rows[SwapResult.I].HeaderCell.Value = adj_matrix_data_grid.Rows[SwapResult.J + Config_matrix.M].HeaderCell.Value;
            adj_matrix_data_grid.Rows[SwapResult.J + Config_matrix.M].HeaderCell.Value = save;

            local_degree_show();
            connectivity_show();

            if (!SwapResult.Flag)
            {
                int[,] savearr = new int[Config_matrix.N - Config_matrix.M, Config_matrix.N - Config_matrix.M];
                for (int i = Config_matrix.M; i < Config_matrix.N; i++)
                {
                    for (int j = Config_matrix.M; j < Config_matrix.N; j++)
                    {
                        savearr[i - Config_matrix.M, j - Config_matrix.M] = Config_matrix.AdjMatrixC[i, j];
                    }
                }

                for (int i = 0; i < Config_matrix.N; i++)
                {
                    for (int j = 0; j < Config_matrix.N; j++)
                    {
                        Config_matrix.ResultAdjMatrixC[i + Config_matrix.M * Config_matrix.Piececount,
                                                       j + Config_matrix.M * Config_matrix.Piececount] = Config_matrix.AdjMatrixC[i, j];
                    }
                }

                Config_matrix.N         -= Config_matrix.M;
                Config_matrix.AdjMatrixC = new int[Config_matrix.N, Config_matrix.N];

                for (int i = 0; i < Config_matrix.N; i++)
                {
                    for (int j = 0; j < Config_matrix.N; j++)
                    {
                        Config_matrix.AdjMatrixC[i, j] = savearr[i, j];
                    }
                }


                for (int i = 0; i < Config_matrix.M; i++)
                {
                    if (i != Config_matrix.M - 1)
                    {
                        result_table[0, Config_matrix.Piececount].Value += Config_matrix.VertexShape[i + Config_matrix.M * Config_matrix.Piececount] + "; ";
                    }
                    else
                    {
                        result_table[0, Config_matrix.Piececount].Value += Config_matrix.VertexShape[i + Config_matrix.M * Config_matrix.Piececount];
                    }
                }


                Config_matrix.Piececount++;

                create_data_grid();
                for (int i = 0; i < Config_matrix.N; i++)
                {
                    for (int j = 0; j < Config_matrix.N; j++)
                    {
                        adj_matrix_data_grid[j, i].Value = Config_matrix.AdjMatrixC[i, j];
                    }
                }
                local_degree_show();
                connectivity_show();
            }
        }