Exemplo n.º 1
0
 private void button2_Click(object sender, EventArgs e)
 {
     Nodes grafDecart = new Nodes(3, 3,true);
     graf2 = new Graph(grafDecart);
     VisualGraph drawGraf = new VisualGraph(10,10,panel2);
     drawGraf.paintGraf(graf2);
     if (graf2 != null && graf2 != null)
     {
         groupBox2.Enabled = true;
         checkBoxList();
     }
     else
     {
         groupBox2.Enabled = false;
     }
 }
Exemplo n.º 2
0
        public Graph setWith(Graph graf)
        {
            Graph graf1 = new Graph(graf.getGrafDecart().count());

            //заполняю координаты в пространстве
            Nodes grafDecart = new Nodes(graf.getGrafDecart().getSizeDecartGrafMatrixX(),
                                                   graf.getGrafDecart().getSizeDecartGrafMatrixY(), false);
            for (int y = 0; y < graf.getGrafDecart().getSizeDecartGrafMatrixY(); y++)
            {
                for (int x = 0; x < graf.getGrafDecart().getSizeDecartGrafMatrixX(); x++)
                {
                    grafDecart.setGrafMatrixDecart(x, y, graf.getGrafDecart().getElementDecartGraf(x, y));
                }
            }
            graf1.setGrafDecart(grafDecart);

            //заполняю грани в пространстве
            for (int y = 0; y < graf.getSize(); y++)
            {
                for (int x = 0; x < graf.getSize(); x++)
                {
                    graf1.setCoordinates(x, y, graf.getCoordinates(x, y));
                }
            }
            //заполняю размеры путей
            for (int y = 0; y < graf.getSize(); y++)
            {
                List<OptionsGraf> listbuf = new List<OptionsGraf>();
                for (int x = 0; x < graf.getSize(); x++)
                {
                    listbuf.Add(graf.grafSizeWay[x][y]);
                }
                graf1.grafSizeWay.Add(listbuf);
            }

            for (int y = 0; y < graf.getSize(); y++)
            {
                List<OptionsGraf> listbuf = new List<OptionsGraf>();
                for (int x = 0; x < graf.getSize(); x++)
                {
                    listbuf.Add(graf.resultSizeWay[x][y]);
                }
                graf1.resultSizeWay.Add(listbuf);
            }

            return graf1;
        }
Exemplo n.º 3
0
        /// <summary>
        /// операция сведения графа
        /// </summary>
        /// <param name="grafForContraction"></param>
        /// <returns></returns>
        public Graph contraction(Graph grafForContraction, List<int> itemForContraction)
        {
            Graph graf = grafForContraction;

            contractionDot = itemForContraction[0];
            /* for (int y = 0; y < graf.getGrafDecart().getSizeDecartGrafMatrixY(); y++)
             {
                 for (int x = 0; x < graf.getGrafDecart().getSizeDecartGrafMatrixX(); x++)
                 {
                     if (graf.getGrafDecart().getElementDecartGraf(x,y)>0)
                     {*/
            for (int y1 = 0; y1 < graf.getGraf().Count; y1++)
            {
                for (int x1 = 0; x1 < graf.getGraf().Count(); x1++)
                {
                    if (graf.getCoordinates(x1, y1))
                    {
                        for (int i = 1; i < itemForContraction.Count; i++)
                        {
                            if (itemForContraction[i] == x1 + 1 || itemForContraction[i] == y1 + 1)
                            {
                                // graf.setCoordinates(x1,y1,false);
                                if (itemForContraction[i] == x1 + 1 && itemForContraction[i] == y1 + 1)
                                {
                                    graf.setCoordinates(x1, y1, false);
                                }
                                else
                                {
                                    if (itemForContraction[i] == x1 + 1)
                                    {
                                        graf.setCoordinates(x1, contractionDot, true);
                                    }
                                    else
                                    {
                                        if (itemForContraction[i] == y1 + 1)
                                        {
                                            graf.setCoordinates(contractionDot, y1, true);
                                        }
                                    }
                                }

                            }
                        }
                    }
                }
            }
            //                    }
            //                }
            //            }

            //удаляю лишние точки
            for (int y = 0; y < graf.getGrafDecart().getSizeDecartGrafMatrixY(); y++)
            {
                for (int x = 0; x < graf.getGrafDecart().getSizeDecartGrafMatrixX(); x++)
                {
                    if (graf.getGrafDecart().getElementDecartGraf(x, y) > 0)
                    {
                        for (int i = 1; i < itemForContraction.Count; i++)
                        {
                            if (itemForContraction[i] == graf.getGrafDecart().getElementDecartGraf(x, y))
                            {
                                graf.getGrafDecart().setGrafMatrixDecart(x, y, 0);
                            }
                        }
                    }
                }
            }

            //переписываю матрицу смежности с новыми точками
            List<int> mergeDot = new List<int>(); //таблица соотношения текущих точек с точками новой матрицы смежности

            for (int i = 0; i < graf.getGraf().Count; i++)
                mergeDot.Add(0);

            //переписываю имена точек которые удалил
            int nameDot = 0; //имя перезаписываемой точки
            for (int y = 0; y < graf.getGrafDecart().getSizeDecartGrafMatrixY(); y++)
            {
                for (int x = 0; x < graf.getGrafDecart().getSizeDecartGrafMatrixX(); x++)
                {
                    if (graf.getGrafDecart().getElementDecartGraf(x, y) > 0)
                    {
                        nameDot++;

                        //graf.getGrafDecart().setGrafMatrixDecart(x, y, nameDot);
                        mergeDot[graf.getGrafDecart().getElementDecartGraf(x, y) - 1] = nameDot;
                    }
                }
            }

            //переписываю матрицу смежности

            //создал матрицу смежности для дальнейшего заполнения
            List<List<Boolean>> grafBuf = new List<List<bool>>();
            for (int i = 0; i < graf.getGrafDecart().count(); i++)
            {
                List<Boolean> grafBufBuf = new List<bool>();
                for (int j = 0; j < graf.getGrafDecart().count(); j++)
                {
                    grafBufBuf.Add(false);
                }
                grafBuf.Add(grafBufBuf);
            }

            //заполняю матрицу смежности со сдвигом точек по созданной маске

            for (int y = 0; y < graf.getGraf().Count; y++)
            {
                for (int x = 0; x < graf.getGraf().Count; x++)
                {
                    if (graf.getCoordinates(x, y))
                    {
                        for (int i = 1; i < itemForContraction.Count; i++)
                        {
                            /*if (itemForContraction[i] != x && itemForContraction[i] != y)
                            {*/
                            if (mergeDot[x] != 0 && mergeDot[y] != 0)
                            {
                                grafBuf[mergeDot[x] - 1][mergeDot[y] - 1] = true;
                            }

                            //                           }
                        }

                    }
                }
            }
            graf.setGraf(grafBuf);

            //переписываю имена точек которые удалил
            int nameDot1 = 0; //имя перезаписываемой точки
            for (int y = 0; y < graf.getGrafDecart().getSizeDecartGrafMatrixY(); y++)
            {
                for (int x = 0; x < graf.getGrafDecart().getSizeDecartGrafMatrixX(); x++)
                {
                    if (graf.getGrafDecart().getElementDecartGraf(x, y) > 0)
                    {
                        nameDot1++;
                        if (graf.getGrafDecart().getElementDecartGraf(x, y) == contractionDot)
                        {
                            contractionDot = nameDot1;
                        }
                        graf.getGrafDecart().setGrafMatrixDecart(x, y, nameDot1);
                    }

                }
            }
            return graf;
        }
Exemplo n.º 4
0
        /// <summary>
        /// Функция вывода графа на экран
        /// </summary>
        /// <param name="graf">
        /// матрица смежности графа котороый нужно построить
        /// </param>
        public void paintGraf(Graph graf)
        {
            System.Drawing.Point pointStart = new System.Drawing.Point();
            System.Drawing.Point pointEnd = new System.Drawing.Point();
            System.Drawing.Graphics grafic = this.panel.CreateGraphics();
            grafic.Clear(Color.FromName("Control"));

            //рисую точки графа
            for (int y = 0; y < graf.getGrafDecart().getSizeDecartGrafMatrixY() ; y++)
            {
                for (int x = 0; x < graf.getGrafDecart().getSizeDecartGrafMatrixX() ; x++)
                {
                    if (graf.getGrafDecart().getElementDecartGraf(x, y) > 0)
                    {
                        pointStart =
                            new System.Drawing.Point(x*scaleGraf + displasmentX,
                                                     y*scaleGraf + displasmentY);
                        String stringWay = "";
                        int bufi = graf.getGrafDecart().getElementDecartGraf(x, y);
                        if (graf.GrafSizeWay.Count>0)
                        stringWay = "(" + graf.GrafSizeWay[bufi-1][bufi-1].SizeWay.ToString() + ")";
                        if (graf.contractionDot == graf.getGrafDecart().getElementDecartGraf(x, y))
                        {
                            grafic.DrawRectangle(System.Drawing.Pens.Red,
                                                 new System.Drawing.Rectangle(pointStart.X - getBetweenScalePoint(),
                                                                              pointStart.Y - getBetweenScalePoint(),
                                                                              scalePoint, scalePoint));
                            grafic.DrawString(Convert.ToString(graf.getGrafDecart().getElementDecartGraf(x, y))+stringWay,
                                              new Font("Arial", 10), new SolidBrush(Color.Red), pointStart);
                        }
                        else
                        {
                            grafic.DrawRectangle(System.Drawing.Pens.Black,
                                                 new System.Drawing.Rectangle(pointStart.X - getBetweenScalePoint(),
                                                                              pointStart.Y - getBetweenScalePoint(),
                                                                              scalePoint, scalePoint));
                            grafic.DrawString(Convert.ToString(graf.getGrafDecart().getElementDecartGraf(x, y))+stringWay,
                                              new Font("Arial", 10), new SolidBrush(Color.Black), pointStart);
                        }

                    }
                   /* if (coordinates.getEdge())
                    {
                            grafic.DrawLine(System.Drawing.Pens.Black, pointStart , pointEnd);
                    }*/
                }
            }
            //рисую ребра графа
               for (int y = 0; y<graf.getGraf().Count;y++)
               {
               for (int x = 0; x < graf.getGraf().Count; x++)
               {
                   if (graf.getCoordinates(x, y))
                   {

                       pointStart =
                           new Point(graf.getCoordinatePoint(x).getStartCoordinate().getX()*scaleGraf + displasmentX,
                                     graf.getCoordinatePoint(x).getStartCoordinate().getY()*scaleGraf + displasmentY);
                       pointEnd =
                           new Point(graf.getCoordinatePoint(y).getStartCoordinate().getX()*scaleGraf + displasmentX,
                                     graf.getCoordinatePoint(y).getStartCoordinate().getY()*scaleGraf + displasmentY);
                       grafic.DrawLine(System.Drawing.Pens.Black, pointStart, pointEnd);
                       Point pointString = new Point(((pointStart.X + pointEnd.X)/2),
                                                     ((pointStart.Y + pointEnd.Y)/2));
                    /*   if(x<y)
                       {
                           if (graf.GrafSizeWay[x][y].SizeWay == 0)
                           {
                               grafic.DrawString(Convert.ToString(graf.GrafSizeWay[y][x].SizeWay),
                                                 new Font("Arial", 10), new SolidBrush(Color.Brown), pointString);
                           }
                       else
                           {

                               grafic.DrawString(Convert.ToString(graf.GrafSizeWay[x][y].SizeWay),
                                                 new Font("Arial", 10), new SolidBrush(Color.Brown), pointString);
                           }
                       }*/
                   }

               }
               }
        }
Exemplo n.º 5
0
 private void дейкстераToolStripMenuItem_Click(object sender, EventArgs e)
 {
     grafResult = grafResult.setWith(graf1);
      grafResult.algoritmDeikster(Convert.ToInt32(textBox2.Text));
     VisualGraph drawGraf = new VisualGraph(10, 10, panel3);
     drawGraf.paintGraf(grafResult);
     label6.Text = "Algorithm Deikstera";
 }
Exemplo n.º 6
0
 private void флойдаToolStripMenuItem_Click(object sender, EventArgs e)
 {
     grafResult = graf1.setWith(graf1);
     grafResult.algoritmFloid();
     VisualGraph drawGraf = new VisualGraph(10, 10, panel3);
     drawGraf.paintGraf(grafResult);
     label6.Text = "algorithm Floida";
 }
Exemplo n.º 7
0
        /// <summary>
        /// Сведение
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void grafContractionButton_Click(object sender, EventArgs e)
        {
            if (comboBox1.Text == "Graf №1")
            {
               grafResult =  grafResult.setWith( graf1);
                label6.Text = "Addition graf №1 ";
                List<int> buf = new List<int>();
                for (int i = 0; i < checkedListBox1.Items.Count; i++)
                {
                    if (checkedListBox1.GetItemChecked(i))
                    {
                        buf.Add(Convert.ToInt32(checkedListBox1.Items[i]));
                    }
                }
                grafResult = grafResult.contraction(grafResult, buf);
            }
            else
            {
                grafResult = grafResult.setWith(graf2);

                label6.Text = "Addition graf №2 ";
            }

            VisualGraph drawGraf = new VisualGraph(10, 10, panel3);
            drawGraf.paintGraf(grafResult);
        }
Exemplo n.º 8
0
 private void grafUnionButton_Click(object sender, EventArgs e)
 {
     label1.Text =Convert.ToString( graf1.getCountPoint(graf2.getGrafDecart()));
     grafResult = graf1 + graf2;
     VisualGraph drawGraf = new VisualGraph(10, 10,panel3);
     drawGraf.paintGraf(grafResult);
     label6.Text = "Union graf №1 and graf №2";
 }
Exemplo n.º 9
0
        private void grafConnectionButton_Click(object sender, EventArgs e)
        {
            if (label2.Text == "1->2")
            {
                grafResult = graf1 * graf2;
                label6.Text = "Connection graf №1 with graf №2";
            }
            else
            {
                grafResult = graf2 * graf1;
                label6.Text = "Connection graf №2 with graf №1";
            }

            VisualGraph drawGraf = new VisualGraph(10, 10, panel3);
            drawGraf.paintGraf(grafResult);
        }
Exemplo n.º 10
0
        private void grafAdditionButton_Click(object sender, EventArgs e)
        {
            if (comboBox1.Text == "Graf №1")
            {
               grafResult =  grafResult .setWith( graf1);
                grafResult++;
                label6.Text = "Addition graf №1 ";
            }
            else
            {
                grafResult = grafResult.setWith(graf2);
                grafResult++;
                label6.Text = "Addition graf №2 ";
            }

            VisualGraph drawGraf = new VisualGraph(10, 10, panel3);
            drawGraf.paintGraf(grafResult);
        }
Exemplo n.º 11
0
        private void createGrafSizeWay(Graph graf1)
        {
            if (graf1 == null)
                return;
            dataGridView3.DataSource = null;
            dataGridView3.Rows.Clear();
            dataGridView3.Columns.Clear();
            dataGridView4.DataSource = null;
            dataGridView4.Rows.Clear();
            dataGridView4.Columns.Clear();
            for (int i = 0; i < graf1.getGraf().Count; i++)
            {
                DataGridViewColumn col = new DataGridViewTextBoxColumn();
                col.Name = Convert.ToString(i + 1);
                col.HeaderText = Convert.ToString(i + 1);
                col.ValueType = typeof(string);
                col.Width = 50;
                DataGridViewColumn col1 = new DataGridViewTextBoxColumn();
                col1.Name = Convert.ToString(i + 1);
                col1.HeaderText = Convert.ToString(i + 1);
                col1.ValueType = typeof(string);
                col1.Width = 50;
                dataGridView3.Columns.Add(col);
                dataGridView4.Columns.Add(col1);
            }

            for (int y = 0; y < graf1.getGraf().Count; y++)
            {
                DataGridViewRow row = new DataGridViewRow();
                DataGridViewRow row1 = new DataGridViewRow();
                for (int x = 0; x < graf1.getGraf().Count; x++)
                {
                    DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();
                    DataGridViewTextBoxCell cell1 = new DataGridViewTextBoxCell();
                    cell1.ValueType = typeof (int);
                    cell1.Value = Convert.ToInt32(graf1.resultSizeWay[x][y].SizeWay);
                    cell.ValueType = typeof(int);
                    cell.Value = Convert.ToInt32(graf1.GrafSizeWay[x][y].SizeWay);
                    row.Cells.Add(cell);
                    row1.Cells.Add(cell1);
                }
                row1.HeaderCell.Value = Convert.ToString(y + 1);
                row.HeaderCell.Value = Convert.ToString(y + 1);
                dataGridView3.Rows.Add(row);
                dataGridView4.Rows.Add(row1);
            }
        }
Exemplo n.º 12
0
        private void createGrafInfo(Graph graf1)
        {
            if (graf1 == null)
                return;
            dataGridView2.DataSource = null;
            dataGridView2.Rows.Clear();
            dataGridView2.Columns.Clear();
            for (int i = 0; i < graf1.getGraf().Count; i++)
            {
                DataGridViewColumn col = new DataGridViewTextBoxColumn();
                col.Name = Convert.ToString(i+1);
                col.HeaderText = Convert.ToString(i+1);
                col.ValueType = typeof(string);
                col.Width = 50;
                dataGridView2.Columns.Add(col);
            }

            for (int y = 0; y < graf1.getGraf().Count; y++)
            {
                DataGridViewRow row = new DataGridViewRow();
                for (int x = 0; x < graf1.getGraf().Count; x++)
                {
                        DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();
                        cell.ValueType = typeof (int);
                        cell.Value = Convert.ToInt32(graf1.getCoordinates(x,y));
                        row.Cells.Add(cell);
                }
                row.HeaderCell.Value = Convert.ToString(y + 1);
                dataGridView2.Rows.Add(row);
            }
        }
Exemplo n.º 13
0
        private void createGrafDecartInfo(Graph graf1)
        {
            if (graf1==null)
                return;
            dataGridView1.DataSource = null;
            dataGridView1.Rows.Clear();
            dataGridView1.Columns.Clear();
            for (int i = 0; i < graf1.getGrafDecart().getSizeDecartGrafMatrixX(); i++)
            {
                DataGridViewColumn col = new DataGridViewTextBoxColumn();
                col.Name = Convert.ToString(i+1);
                col.HeaderText = Convert.ToString(i+1);
                col.ValueType = typeof(string);
                col.Width = 50;
                dataGridView1.Columns.Add(col);
            }

            for (int y = 0; y < graf1.getGrafDecart().getSizeDecartGrafMatrixY(); y++)
            {
                DataGridViewRow row = new DataGridViewRow();
                for (int x = 0; x < graf1.getGrafDecart().getSizeDecartGrafMatrixX(); x++)
                {
                        DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();
                        cell.ValueType = typeof (int);
                        cell.Value = graf1.getGrafDecart().getElementDecartGraf(x,y);
                        row.Cells.Add(cell);
                }
                row.HeaderCell.Value = Convert.ToString(y + 1);
                dataGridView1.Rows.Add(row);
            }
        }