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

сд6

.pdf
Скачиваний:
1
Добавлен:
01.12.2024
Размер:
361.3 Кб
Скачать

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

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

КИБЭВС

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

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

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

_______ В.С. Колосова

_______

Принял:

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

_______ Е.Е. Лунёва

_______

Томск 2024

Задание

Реализовать возможность работы с графом N узлов, M ребер. Выберете

самостоятельно структуру. Обеспечьте следующие интерфейсные методы:

ввод графа (можно случайным образом, можно вводить с клавиатуры);

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

В заданной системе дорог определить кратчайшее расстояние из города А в город В, при этом путь не должен проходить через город С, а также восстановить путь.

2

 

 

Содержание

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

2

1

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

4

2

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

5

3

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

13

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

14

3

1. Введение

Реализовать возможность работы с графом N узлов, M ребер. Выберете

самостоятельно структуру. Обеспечьте следующие интерфейсные методы:

ввод графа (можно случайным образом, можно вводить с клавиатуры);

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

В заданной системе дорог определить кратчайшее расстояние из города А в город В, при этом путь не должен проходить через город С, а также восстановить путь.

4

2 Ход работы

Реализован класс Graph и инициализация графа (рисунок 2.1).

Рисунок 2.1 — Класс Graph

Реализован метод Graph в классе Graph, который добавляет граф с заданным количеством вершин (рисунок 2.2).

Рисунок 2.2 — Реализация метода Graph в классе Graph

Реализован метод Print, который выводит матрицу смежности в классе

Graph (рисунок 2.3).

5

Рисунок 2.3 — Реализация метода Print в классе Graph

Метод ShortestPath использует алгоритм Дейкстры для поиска

кратчайшего пути между двумя заданными городами (вершинами) в графе,

исключая третий город (рисунок 2.4). Метод инициализирует массивы dist, visited и prev, которые используются для хранения информации о расстоянии, посещенных вершинах и предыдущих вершинах соответственно. Он устанавливает начальное расстояние от города-начала до самого себя равным 0,

а все остальные расстояния устанавливает в бесконечность. Метод вводит цикл,

который продолжается до тех пор, пока все города не будут посещены. В каждой

6

итерации цикла он выбирает вершину с минимальным расстоянием, которую еще не посетил, и отмечает ее как посещенную. Затем он обновляет расстояния и предыдущие вершины для всех непосещенных соседей этой вершины,

исключая город С. После завершения цикла, метод восстанавливает путь,

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

Рисунок 2.4 — Метод ShortestPath в классе Graph

7

3Заключение

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

Реализация программы представлена в приложении А.

8

Приложение А

using System;

using System.Collections.Generic;

public class Graph

{

private int[,] adjMatrix; // Матрица смежности private int vertices; // Количество вершин

// Конструктор для создания графа с N узлами public Graph(int vertices)

{

this.vertices = vertices;

adjMatrix = new int[vertices, vertices];

// Инициализация матрицы смежности for (int i = 0; i < vertices; i++)

{

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

{

if (i == j)

{

adjMatrix[i, j] = 0; // расстояние от узла до самого

себя — 0

}

else

{

adjMatrix[i, j] = int.MaxValue; // бесконечность для

остальных путей

9

}

}

}

}

// Метод для добавления ребра между двумя узлами с весом public void AddEdge(int u, int v, int weight)

{

adjMatrix[u, v] = weight;

adjMatrix[v, u] = weight; // Для неориентированного графа

}

// Улучшенный метод для вывода матрицы смежности public void Print()

{

Console.WriteLine("Матрица смежности/весов графа:");

// Заголовок столбцов

Console.Write(" ");

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

{

Console.Write($"{i,5} "); // Нумерация столбцов

}

Console.WriteLine();

// Разделительная строка

Console.WriteLine(new string('-', 6 * (vertices + 1)));

10

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