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

Практики / ПР6 / СД_П6

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

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

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

Кафедра безопасности информационных систем (БИС)

Графы Отчет по практической работе №6

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

Студент гр. 733-1

_______ Сметанников Д.Е

_______

Принял:

преподаватель КИБЭВС

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

_______

Томск 2024

Задание

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

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

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

Вариант 7. Задана система дорог. Найти такой город, для которого сумма кратчайших расстояний до остальных городов максимальна.

2

 

 

Содержание

 

Задание..................................................................................................................

.2

1

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

.4

2

Ход работы.............................................................................................................

5

 

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

9

 

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

10

3

1Введение

Целью работы является реализация программы для работы с графами, представляющими систему дорог с переменным числом узлов и рёбер. Программа позволяет вводить графы случайным образом или с клавиатуры и выводить матрицу смежности или весов. Основное внимание уделяется нахождению города с максимальной суммой кратчайших расстояний до остальных городов.

4

2Ход работы

Вработе реализуется ориентированный граф и матрица смежности.

Ориентированный граф — В ориентированном графе рёбра имеют направление, что означает, что если есть ребро от узла A к узлу B, то это не подразумевает наличие ребра от B к A.

Матрица смежности — это квадратная матрица, которая используется для представления графа. Если граф содержит N узлов, матрица будет размером NxN.

Graph – инициализирует граф с заданным количеством городов, проверяет, чтобы количество городов было больше нуля, создает матрицу смежности, устанавливая расстояние между городами на 0 для одного и того же города и на очень большое значение для всех остальных пар. (рис .1)

Рисунок 1 — Graph

5

AddEdge – добавляет ребро между двумя городами с заданным весом, проверяет корректность индексов и положительность веса, устанавливает расстояние в матрице смежности для ориентированного графа (рис. 2)

Рисунок 2 — AddEdge

PrintAdjMatrix — выводит матрицу смежности на экран (рис. 3)

Рисунок 3 — PrintAdjMatrix

FloydWarshall – реализует алгоритм Флойда-Уоршелла для нахождения кратчайших расстояний между всеми парами городов, создаёт новую матрицу расстояний, копируя данные из матрицы смежности и обновляя значения, если

обнаруживаются более короткие пути через промежуточные города (рис. 4) 6

Рисунок 4 — FloydWarshall

FindCityWithMaxTotalDistance — вычисляет город с максимальной суммой кратчайших расстояний до всех остальных, вызывает метод FloydWarshall для получения кратчайших расстояний, суммирует расстояния для каждого города и обновляет максимальные значения, если найден город с большей суммой (рис. 5)

7

Рисунок 5 — FindCityWithMaxTotalDistance

8

Заключение

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

9

Приложение А (обязательное)

class Graph

{

private int[,] adjMatrix; private int numCities;

public Graph(int numCities)

{

if (numCities <= 0)

{

throw new ArgumentException("Количество городов должно быть больше нуля.");

}

this.numCities = numCities;

adjMatrix = new int[numCities, numCities];

for (int i = 0; i < numCities; i++) // делаем матрицу смежности

{

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

{

if (i == j) adjMatrix[i, j] = 0;

else

adjMatrix[i, j] = int.MaxValue / 2; // берем половину максимального значения, чтобы избежать переполнения

}

}

10

Соседние файлы в папке ПР6