
Практическая работа №6
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
«Графы» Отчет по практической работе №6
по дисциплине «Структуры данных»
Студент гр. 723-1
_________Лысенко Е.М.
__________
Принял Ст. преподаватель кафедры КИБЭВС
________ Лунѐва Е.Е.
__________
Томск 2024
Задание
Реализовать возможность работы с графом N узлов, M ребер. Выберете
самостоятельно структуру. Обеспечьте следующие интерфейсные методы:
ввод графа (можно случайным образом, можно вводить с клавиатуры), НЕДОПУСТИМО работать только с конечным числом ребер и узлов. Приложение должно позволять вводить разные графы.
вывод графа – матрица смежности или весов.
Вариант 3. Задана система дорог. Определить кратчайшее расстояние из города А в город В, при этом путь не должен проходить через город С и D.
Восстановить путь.
2
Содержание
Введение................................................................................................................... |
4 |
2 ХОД РАБОТЫ ...................................................................................................... |
5 |
2.1 Генерация, ввод и вывод графа .................................................................... |
5 |
2.2 Метод для нахождения кратчайшее расстояние из города А в город В, |
|
при этом путь не должен проходить через город С и D .................................. |
6 |
2.3 Функционал программы................................................................................ |
7 |
Заключение .............................................................................................................. |
9 |
Приложение А ....................................................................................................... |
10 |
3
Введение
Целью работы является получение навыков реализации графов и
разработки алгоритмов взаимодействия с ними на языке программирования
C#.
4

2 ХОД РАБОТЫ
В первую очередь был создан класс Graph (рисунок 2.1), который и отвечает за работу графа в данной практической работе. Программный код представлен в приложении А.
Рисунок 2.1 – Конструктор графа
2.1 Генерация, ввод и вывод графа
По заданию необходимо было реализовать метод для ввода графа, ввод графа в данной программе осуществляется следующим образом,
пользователь задает количество вершин для графа, а затем пользователь выбирает длину пути между узлами, если они есть. Для этого используются методы AddEdge (рисунок 2.2), для вывода же графа на экран используется выведение матрицы смежности через одноименный метод
PrintAdjacencyMatrix (рисунок 2.3).
Рисунок 2.2 – Метод для добавления ребра между узлами
5

Рисунок 2.3 – Метод для вывода матрицы смежности
Заполнение графа производится с клавиатуры пользователем.
2.2 Метод для нахождения кратчайшее расстояние из города А в город В,
при этом путь не должен проходить через город С и D
1.Инициализация: Создает таблицу distance для хранения кратчайших расстояний от начальной точки до всех остальных точек. Все значения в таблице устанавливаются как бесконечность (int.MaxValue)
2.Поиск ближайшей точки: Из всех точек, которые еще не были посещены (не отмечены в visited) и не запрещены (не находятся в
forbiddenNodes), выбирается точка с минимальным расстоянием.
3.Обновление расстояний: Проверяет, можно ли сократить расстояние до других точек, пройдя через только что найденную ближайшую точку.
4.Повторение: Повторяет шаги 2 и 3, пока не посетит все доступные
точки.
5. Результат: В итоге, код выводит найденное минимальное
расстояние до конечной точки или сообщает, что путь не найден.
6

Рисунок 2.4 – Нахождение кратчайшего пути
2.3 Функционал программы
Основной функционал данного приложения представлен на рисунке
2.5, там же представлен вывод для одного из случайных графов.
7

Рисунок 2.5 – Результаты работы программного кода
8
Заключение
В ходе выполнения данной работы был реализован класс Graph, а
также реализованы методы для работы с ним. Отчет был написан согласно ОС ТУСУР 01-2021.
9
Приложение А Код программы
using System;
using System.Collections.Generic;
class Graph
{
private int[,] adjacencyMatrix; // двумерный массив (матрича смежности графа) информачия о дорогах между городами.
private int numNodes; // колицество городов в графе
public Graph(int numNodes) // создает новый граф с заданным колицеством городов
{
this.numNodes = numNodes;
adjacencyMatrix = new int[numNodes, numNodes];
}
public void AddEdge(int from, int to, int weight = 1) // метод добавляет новую дорогу между городами
{
if (from >= 0 && from < numNodes && to >= 0 && to < numNodes)
{
adjacencyMatrix[from, to] = weight;
adjacencyMatrix[to, from] = weight; // Если граф неориентированный,
добавляем обратное ребро
}
else
{
Console.WriteLine("Некорректное знацение узлов.");
}
}
public void PrintAdjacencyMatrix() // метод пецатает матричу смежности графа
{
Console.WriteLine("Матрича смежности графа:"); for (int i = 0; i < numNodes; i++)
{
for (int j = 0; j < numNodes; j++)
{
Console.Write(adjacencyMatrix[i, j] + " ");
}
Console.WriteLine();
}
}
public void ShortestPath(int startNode, int endNode, int[] forbiddenNodes)
{
int[] distance = new int[numNodes]; // кратцайшие расстояния от нацального города до всех остальных городов
bool[] visited = new bool[numNodes]; // информачию о том, какие города уже были посещены
for (int i = 0; i < numNodes; i++)
{
distance[i] = int.MaxValue; visited[i] = false;
}
distance[startNode] = 0; // Расстояние до самого себя всегда равно 0
for (int count = 0; count < numNodes - 1; count++) // пока не будут посещены все города
{
10