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; } }
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; }
/// <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; }
/// <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); } }*/ } } } }
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"; }
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"; }
/// <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); }
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"; }
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); }
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); }
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); } }
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); } }
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); } }