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

Практика 6 - Графы - СФ

.pdf
Скачиваний:
11
Добавлен:
06.11.2022
Размер:
304.16 Кб
Скачать

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

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

Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

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

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

Студент гр. ххххх

________ ххххх

________

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

________ ххххх

________

Томск 2022

Задание

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

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

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

2)Приложение должно позволять вводить разные графы;

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

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

N километров.

2

Содержание

1 Введение …………………………………………………………………………... 4

2 Ход работы ………………………………………………………………………... 5

3 Заключение ……………………………………………………………………….. 8

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

3

1 Введение

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

4

2 Ход работы

Программа создает класс Graph. В нем создаются переменные M и N,

количество ребер и количество вершин соответственно. Затем в методе Matrix

создается матрица весов для неопределенного графа, в которой строки и столбцы ограничены N. Массив заполняется случайными числами. Также ведется счет количества столбцов, если количество столбцов меньше M, то строка переходит на следующую строку. На рисунке 2.1 изображен класс Graph. На рисунке 2.2

представлен код программы.

Рисунок 2.1 - класс Graph

Рисунок 2.2 - Заполнение матрицы

5

Метод Print выводит граф на консоль. На рисунке 2.3 представлен код метода.

Рисунок 2.3 - Метод Print

Для выполнения варианта задания был написан метод Ways. Объявляется счетчик countW, далее идет перебор массива, но элементы с одинаковыми номерами столбца и строки не учитывается, далее элемент массива проверяется на 0 и на то, меньше ли он заданного ограничения. Если он не соответствует условиям, то выполняется переход на следующую строку. На рисунке 2.4

представлен код метода.

Рисунок 2.4 - Метод Ways

6

Работа программы представлена на риснке 2.5.

Рисунок 2.5 - Работа программы

7

3Заключение

Впроцессе выполнения практической работы были освоены навыки работы с графами и, в соответствии с вариантом, реализованы необходимые методы на языке программирования C#.

8

Приложение А

(обязательно)

using System;

using System.Diagnostics.Metrics; using System.Security.Cryptography;

namespace System

{

class Program

{

class Graph

{

int N, M; int[,] matrix;

public Graph(int N, int M)

{

this.N = N; this.M = M;

matrix = Matrix(this.N, this.M);

}

private static int[,] Matrix(int N, int M)

{

int[,] ArrWays = new int[N, N]; Random rand = new Random();

int count1 = 0;

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

{

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

{

if (i == j)

{

ArrWays[i, j] = 0;

}

else

{

if (count1 < M)

{

ArrWays[i, j] = ArrWays[j, i] = rand.Next(1,10); count1++;

}

}

}

}

return ArrWays;

}

public void Print()

{

Console.WriteLine("Матрица весов: "); for (int i = 0; i < N; i++)

{

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

{

Console.Write(matrix[i,j] + "\t");

}

Console.WriteLine();

}

Console.WriteLine();

}

public void Ways(int way)

{

9

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

{

int countW = 0;

for (int k = 0; k < N; k++)

{

if (i != k)

{

if (matrix[i, k] != 0 && matrix[i,k] <= way)

{

countW++;

}

else

{

break;

}

}

}

if(countW == N-1)

Console.WriteLine($"Из узла {i} можно добраться во все города.");

}

}

}

static void Main(string[] args)

{

Console.Write("Количество узлов: "); int N = int.Parse(Console.ReadLine()); Console.Write("Количество ребер: "); int M = int.Parse(Console.ReadLine()); Graph graph = new Graph(N,M); Console.WriteLine(); Console.WriteLine();

graph.Print(); Console.Write("Величина пути: ");

int way = int.Parse(Console.ReadLine()); Console.WriteLine();

graph.Ways(way);

}

}

}

10