В данной работы реализован алгоритм Дейкстры-Прима на языке С#, с графической, пошаговой отрисовкой алгоритма на WinForms. Чтобы запустить проект требуется устновить Visual Studio 2013 или новее.
В ходе данного курсового проекта были детально описаны основные понятия теории графов, также были приведены основные виды представления графов при программировании. Для реализации графа в программе был выбран список дуг, так как данный метод предназначен для неориентированных взвешенных графов.
Также был проанализирован Алгоритм Крускала, приведен и описан пример работы данного алгоритма. Помимо этого, были объяснены принципы работ других похожих алгоритмов, таких как алгоритм Борувки и алгоритм Прима, и к ним также приведены примеры. После этого, было описано основное отличие алгоритма Крускала от других, которая заключается в решении задачи пересекающихся множеств.
Далее была создана и проанализирована программа реализующая и визуализирующая алгоритм Крускала, она состояла из двух файлов. В первом файле представлен граф, а во втором его визуализация и визуализация алгоритма Прима. Все методы класса реализующего граф, а также функционал интерфейса, который включал себя различные кнопки, каждая из которых выполняла определенную задачу, были подробно описаны, а также был продемонстрирован их код или же скриншот. При запуске данной программы требуется ввести начальные данные, после чего нажать соответствующую кнопку и произойдет визуализация алгоритма Прима для заданного графа.
Содержание пояснительной записки:
Фрагмент программного кода:
private void button2_Click(object sender, EventArgs e) { int a1, a2, a3; a1 = Convert.ToInt32(textBox2.Text); a2 = Convert.ToInt32(textBox3.Text); a3 = Convert.ToInt32(textBox4.Text); this.textBox2.Text = "";this.textBox3.Text = ""; this.textBox4.Text = "";g.AddVer(rebra,a1,a2,a3); rebra++; Graphics u = pictureBox1.CreateGraphics(); Pen k = new Pen(Color.DarkRed, 2); System.Drawing.Fontshr = new System.Drawing.Font(FontFamily.GenericSansSerif, 8.0F, FontStyle.Regular); u.DrawLine(k, cordx[a1 - 1], cordy[a1 - 1], cordx[a2 - 1], cordy[a2 - 1]); u.DrawString(Convert.ToString(a3),shr, Brushes.DarkOrange,(cordx[a2 - 1] + cordx[a1 - 1]) / 2+7, (cordy[a2 - 1] + cordy[a1 - 1]) / 2+3); u.FillEllipse(Brushes.White, cordx[a1 - 1] - 9, cordy[a1 - 1] - 9, 18, 18); u.FillEllipse(Brushes.White, cordx[a2 - 1] - 9, cordy[a2 - 1] - 9, 18, 18); u.DrawString(Convert.ToString(a1), shr, Brushes.Blue, cordx[a1 - 1] - 5, cordy[a1 - 1]-9); u.DrawString(Convert.ToString(a2), shr, Brushes.Blue, cordx[a2 - 1] - 5, cordy[a2 - 1]-9); }
Содержание архива:
- Исходный код приложения на языке программирования С#
- Пояснительная записка (29 страниц)
psyfaker