Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СД Практика 6

.pdf
Скачиваний:
0
Добавлен:
17.06.2025
Размер:
484.08 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)

ГРАФЫ Отчет по практической работе №6

по дисциплине «Структуры данных»

Студент гр. 7х3-х

_______ хххххххх

_______

Принял: Преподаватель КИБЭВС

_______ Уразаев Д.Р.

_______

Томск 2024

Задание

Реализовать возможность работы с графом N узлов, M ребер. Выберете самостоятельно структуру. Обеспечьте следующие интерфейсные методы:

Ввод графа (можно случайным образом, можно вводить с клавиатуры) НЕДОПУСТИМО работать только с конечным числом ребер и узлов. Приложение должно позволять вводить разные графы;

Вывод графа – матрица смежности или весов.

Граф допускается использовать как ориентированный, так и неориентированный. Обязательно знать определения данных графов.

Вариант 2. Задана система дорог. Определить, до какого города максимальное кратчайшее расстояние из города А – задать А. Восстановите путь.

2

 

 

Содержание

 

1

Введение..............................................................................................................

4

2

ХОД РАБОТЫ....................................................................................................

5

 

2.1

Ввод графа..................................................................................................

5

 

2.2

Нахождение кратчайшего пути до города А..........................................

6

 

2.3

Вывод графа...............................................................................................

8

Заключение.............................................................................................................

9

Приложение А......................................................................................................

10

3

1 Введение

Целью работы является реализация графа при помощи динамических структур на языке программирования C#.

4

2 ХОД РАБОТЫ

2.1Ввод графа

Вприложении А представлен листинг реализованной программы.

С клавиатуры вводятся значения узлов и ребер. Элементы получаемой матрицы задаются случайным образом. Фрагмент кода, отвечающий за ввод графа представлен на рисунке 2.1.

Рисунок 2.1 – Ввод графа

5

2.2 Нахождение кратчайшего пути до города А

Кратчайший путь до города А находится с помощью алгоритма Дейкстры. В программе он реализуется с помощью public метода

MaxShortestPathFrom() и private методов GetPath() и Dijkstra().

Метод Dijkstra() устанавливает изначальное расстояние до начальной вершины равное нулю, а до всех остальных – максимально большому числу, также создается массив посещенных вершин. На каждом шаге выбирается непосещённая вершина с наименьшим расстоянием. Для каждой соседней вершины текущей вершины происходит проверка: можно ли улучшить расстояние до неё, проходя через текущую. Если да, то расстояние обновляется. После обработки всех соседей текущей вершины она добавляется в массив посещённых. В конечном итоге метод возвращает кратчайшее расстояние от начальной вершины.

Метод GetPath() восстанавливает путь, который был пройден до города А. Метод возвращает список вершин, через которые проходил путь до города А с помощью обратного прохода.

Метод MaxShortestPathFrom() выводит кратчайшее расстояние до города А и путь, который был пройден до него, а также осуществляет проверку на существования пути до города А.

Методы представлены на рисунке 2.2.

6

Рисунок 2.2 – Методы для нахождения кратчайшего пути до города А

7

2.3 Вывод графа

Граф выводится в виде матрицы смежности с помощью метода Print(). На рисунке 2.3 представлена реализация в программе.

Рисунок 2.3 – Вывод графа Результат работы программы представлен на рисунке 2.4.

Рисунок 2.4 – Результат работы программы

8

Заключение

В ходе выполнения данной практической работы был реализован граф с помощью классов, а также типовые методы для работы с ним.

9

Приложение А

class Graph

{

private int n; private int[,] graph; public Graph(int n)

{

this.n = n;

graph = new int[n, n];

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

graph[i, j] = int.MaxValue;

}

}

}

public void Edge(int u, int v, int weight = 1)

{

graph[u, v] = weight; graph[v, u] = weight;

}

public void Random(int m, int maxWeight = 10)

{

Random rand = new Random(); for (int i = 0; i < m; i++)

{

int u = rand.Next(n); int v = rand.Next(n);

int weight = rand.Next(1, maxWeight + 1); Edge(u, v, weight);

}

}

public void Print()

{

Console.Write("Город:\t"); for (int i = 0; i < n; i++)

{

Console.Write(i + "\t");

}

Console.WriteLine();

for (int i = 0; i < n; i++)

10

Соседние файлы в предмете Структуры данных