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

Практики(Вариант №1) / Практическая работа №6

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

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

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР) Кафедра безопасности информационных систем (БИС)

ГРАФЫ Отчет по практической работе №6 по дисциплине «Структуры данных»

Студент гр.

________

__.__.2025

Принял

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

________ Е.Е. Лунева __.__.2025

Томск 2025

Задание

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

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

иузлов. Приложение должно позволять вводить разные графы.

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

Вариант 1. Задана система дорог. Определить кратчайшие пути из одного города (задавать из какого) ко всем другим. Восстановить путь.

2

 

Оглавление

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

2

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

4

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

5

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

9

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

10

3

Введение

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

4

1 ХОД РАБОТЫ

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

направление, что означает, что если есть ребро от узла A к узлу B, то это не подразумевает наличие ребра от B к A.

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

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

Рисунок 1 — Graph

5

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

Рисунок 2 — AddEdge

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

Рисунок 3 — PrintAdjMatrix

6

ReconstructPath - Восстанавливает конкретный маршрут между двумя городами на основе результатов алгоритма Дейкстры. (рис. 4)

Рисунок 4 — ReconstructPath

7

PrintAllShortestPaths - Отображает все кратчайшие пути из заданного города с расстояниями и полными маршрутами. (рис. 5)

Рисунок 5 — PrintAllShortestPaths

8

Заключение

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

9

Приложение А

(обязательное) Код программы

using System;

 

using System.Collections.Generic;

using System.Linq;

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;

 

 

 

}

elseadjMatrix[i, j] = int.MaxValue / 2;

 

 

}

 

 

}

 

 

 

 

 

 

 

// Добавление ребра

 

public void AddEdge(int u, int v, int weight)

 

{

if (u >= numCities || v >= numCities || u < 0 || v < 0)

 

 

 

 

{

throw new IndexOutOfRangeException("Ошибка! Указанный город не существует.");

 

 

}

 

 

 

 

 

 

if (weight <= 0)

 

 

{

throw new ArgumentException("Расстояние между городами должно быть

 

 

 

положительным числом.");

 

 

}

 

 

 

 

adjMatrix[u, v] = weight;

 

}

adjMatrix[v, u] = weight;

 

 

 

 

 

// Автоматическая генерация графа

 

public void GenerateRandomGraph(int maxEdges, int maxWeight = 100)

 

{

Random rand = new Random();

 

 

 

 

int edgesAdded = 0;

 

 

// Гарантируем связность графа

 

 

for (int i = 1; i < numCities; i++)

 

 

{

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

 

 

 

 

 

 

 

10

Соседние файлы в папке Практики(Вариант №1)