コード例 #1
0
        static void Main(string[] args)
        {
            var parser         = new GraphParser(@"in.txt");
            var graph          = parser.ParseGraph();
            var result         = graph.FindCycles();
            var state          = result == null ? "A" : "N";
            var stringsToWrite = new List <string>();

            stringsToWrite.Add(state);
            if (result != null)
            {
                stringsToWrite.Add(string.Join(" ", result.OrderBy(n => n.NodeNumber).Select(n => n.NodeNumber)));
            }
            File.WriteAllLines(@"out.txt", stringsToWrite);
        }
コード例 #2
0
ファイル: ResolverControl.cs プロジェクト: p-dd/pathfinding
        private void loadButton_ItemClick(object sender, ItemClickEventArgs e)
        {
            string str = string.Empty;

            using (var ofd = new OpenFileDialog())
            {
                ofd.Filter      = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
                ofd.FilterIndex = 1;
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    Stream fileStream = ofd.OpenFile();
                    using (var sr = new StreamReader(fileStream))
                    {
                        str = sr.ReadToEnd();
                    }

                    fileStream.Close();
                }
            }

            try
            {
                data = str.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

                _dGraph                     = GraphParser.ParseGraph(data);
                _bGraph                     = GraphParser.ParseGraph(data);
                _aGraph                     = GraphParser.ParseGraph(data);
                AStar.condition             = true;
                BreadthFirst.found          = false;
                DijkstraAlgorithm.condition = true;

                if (data.Length > 100)
                {
                    speedUp.Enabled   = false;
                    speedDown.Enabled = false;
                    dijkstraPanel.Controls.Clear();
                    dijkstraPanel.RowCount    = 2;
                    dijkstraPanel.ColumnCount = 1;
                    dijkstraPanel.ColumnStyles.Clear();
                    dijkstraPanel.RowStyles.Clear();
                    dijkstraPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
                    dijkstraPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 90));
                    dijkstraPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 10));
                    dijkstraPanel.Controls.Add(LargeMazePictureBox1);
                    LargeMazeSize1.Text = "Размерность лабиринта:" + data.Length.ToString();
                    dijkstraPanel.Controls.Add(LargeMazeSize1);

                    bFirstPanel.Controls.Clear();
                    bFirstPanel.RowCount    = 2;
                    bFirstPanel.ColumnCount = 1;
                    bFirstPanel.ColumnStyles.Clear();
                    bFirstPanel.RowStyles.Clear();
                    bFirstPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
                    bFirstPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 90));
                    bFirstPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 10));
                    bFirstPanel.Controls.Add(LargeMazePictureBox2);
                    LargeMazeSize2.Text = "Размерность лабиринта:" + data.Length.ToString();
                    bFirstPanel.Controls.Add(LargeMazeSize2);

                    aStarPanel.Controls.Clear();
                    aStarPanel.RowCount    = 2;
                    aStarPanel.ColumnCount = 1;
                    aStarPanel.ColumnStyles.Clear();
                    aStarPanel.RowStyles.Clear();
                    aStarPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
                    aStarPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 90));
                    aStarPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 10));
                    aStarPanel.Controls.Add(LargeMazePictureBox3);
                    LargeMazeSize3.Text = "Размерность лабиринта:" + data.Length.ToString();
                    aStarPanel.Controls.Add(LargeMazeSize3);
                    return;
                }

                speedUp.Enabled         = true;
                speedDown.Enabled       = true;
                AStar.speed             = 501;
                DijkstraAlgorithm.speed = 1001;
                AStar.speed             = 501;
                int rows    = data.Length;
                int coloums = data[0].Length;

                //foreach (var control in tableLayoutPanel1.Controls)
                //{
                //    var table = control as TableLayoutPanel;
                //    if (table == null) continue;
                //    foreach (var panel in table.Controls)
                //    {
                //        var p = panel as PanelControl;
                //        if (p == null)
                //            continue;
                //        //foreach (var labelControl in p.Controls)
                //        //{
                //        //    var label = labelControl as System.Windows.Forms.Label;
                //        //    if (label == null) continue;
                //        //    label.Dispose();
                //        //}

                //        //p.Controls.Clear();
                //        p.Dispose();
                //    }
                //}

                dijkstraPanel.Controls.Clear();
                dijkstraPanel.RowCount    = rows;
                dijkstraPanel.ColumnCount = coloums;
                dijkstraPanel.ColumnStyles.Clear();
                dijkstraPanel.RowStyles.Clear();
                for (int i = 0; i < coloums; i++)
                {
                    dijkstraPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, (float)100 / coloums));
                }

                for (int i = 0; i < rows; i++)
                {
                    dijkstraPanel.RowStyles.Add(new RowStyle(SizeType.Percent, (float)100 / coloums));
                }

                for (int i = 0; i < dijkstraPanel.ColumnCount; i++)
                {
                    for (int j = 0; j < dijkstraPanel.RowCount; j++)
                    {
                        PanelControl p = new PanelControl
                        {
                            BorderStyle = BorderStyles.UltraFlat,
                            LookAndFeel =
                            {
                                UseDefaultLookAndFeel = false,
                                Style                 = LookAndFeelStyle.Office2003
                            },
                            Dock   = DockStyle.Fill,
                            Margin = Padding.Empty
                        };
                        if (data.Length < 25)
                        {
                            p.Controls.Add(new System.Windows.Forms.Label
                            {
                                Text     = "",
                                AutoSize = true,
                                Dock     = DockStyle.Fill,
                                Size     = SizeFromClientSize(Parent.Size),
                                Font     = new Font("Times New Roman", 14)
                            });
                        }

                        dijkstraPanel.Controls.Add(p);
                    }
                }

                GraphParser.ParsePanel(data, dijkstraPanel);

                bFirstPanel.Controls.Clear();
                bFirstPanel.RowCount    = rows;
                bFirstPanel.ColumnCount = coloums;
                bFirstPanel.ColumnStyles.Clear();
                bFirstPanel.RowStyles.Clear();
                for (int i = 0; i < coloums; i++)
                {
                    bFirstPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, (float)100 / coloums));
                }

                for (int i = 0; i < rows; i++)
                {
                    bFirstPanel.RowStyles.Add(new RowStyle(SizeType.Percent, (float)100 / coloums));
                }

                for (int i = 0; i < bFirstPanel.ColumnCount; i++)
                {
                    for (int j = 0; j < bFirstPanel.RowCount; j++)
                    {
                        PanelControl p = new PanelControl
                        {
                            BorderStyle = BorderStyles.UltraFlat,
                            LookAndFeel =
                            {
                                UseDefaultLookAndFeel = false,
                                Style                 = LookAndFeelStyle.Office2003
                            },
                            Dock   = DockStyle.Fill,
                            Margin = Padding.Empty
                        };
                        if (data.Length < 25)
                        {
                            p.Controls.Add(new System.Windows.Forms.Label
                            {
                                Text     = "",
                                AutoSize = true,
                                Dock     = DockStyle.Fill,
                                Size     = SizeFromClientSize(Parent.Size),
                                Font     = new Font("Times New Roman", 14)
                            });
                        }

                        bFirstPanel.Controls.Add(p);
                    }
                }

                GraphParser.ParsePanel(data, bFirstPanel);


                aStarPanel.Controls.Clear();
                aStarPanel.RowCount    = rows;
                aStarPanel.ColumnCount = coloums;
                aStarPanel.ColumnStyles.Clear();
                aStarPanel.RowStyles.Clear();
                for (int i = 0; i < coloums; i++)
                {
                    aStarPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, (float)100 / coloums));
                }

                for (int i = 0; i < rows; i++)
                {
                    aStarPanel.RowStyles.Add(new RowStyle(SizeType.Percent, (float)100 / coloums));
                }

                for (int i = 0; i < aStarPanel.ColumnCount; i++)
                {
                    for (int j = 0; j < aStarPanel.RowCount; j++)
                    {
                        PanelControl p = new PanelControl
                        {
                            BorderStyle = BorderStyles.UltraFlat,
                            LookAndFeel =
                            {
                                UseDefaultLookAndFeel = false,
                                Style                 = LookAndFeelStyle.Office2003
                            },
                            Dock   = DockStyle.Fill,
                            Margin = Padding.Empty
                        };
                        if (data.Length < 25)
                        {
                            p.Controls.Add(new System.Windows.Forms.Label
                            {
                                Text     = "",
                                AutoSize = true,
                                Dock     = DockStyle.Fill,
                                Size     = SizeFromClientSize(Parent.Size),
                                Font     = new Font("Times New Roman", 14)
                            });
                        }

                        aStarPanel.Controls.Add(p);
                    }
                }

                GraphParser.ParsePanel(data, aStarPanel);

                if (allAlgsButton.Down)
                {
                    allAlgsButton.PerformClick();
                }

                if (bfsButton.Down)
                {
                    bfsButton.PerformClick();
                }

                if (astarButton.Down)
                {
                    astarButton.PerformClick();
                }

                if (dijkstraButton.Down)
                {
                    dijkstraButton.PerformClick();
                }
            }
            catch (Exception ex)
            {
                var msg = ex.Message;
                MessageBox.Show(msg, "Error", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
        }