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

Лабораторна робота 8 - ТПРІС

.docx
Скачиваний:
0
Добавлен:
13.08.2024
Размер:
89.77 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ”ЛЬВІВСЬКА ПОЛІТЕХНІКА”

Кафедра інформаційних

систем та мереж

Звіт з лабораторної роботи №8

з дисципліни "Технології програмування в розподілених інформаційних системах"

на тему:

"Реалізація алгоритмів паралельних обчислень з використанням

технологій CUDA, OpenGL, OpenCL, Metal, TPL (на вибір) і з використанням

багатопотокового програмування"

Варіант №31

Виконав:

Студент групи КН-38

Яворський Б. Я.

Прийняв:

доцент каф. ІСМ, к.т.н.

Щербак С. С.

ЛЬВІВ – 2018

Мета роботи: набуття навичок програмування графів на основі паралельних

технологій.

Завдання на роботу:

Забезпечити зберігання та зчитування графа у вигляді матриць суміжності та інцидентності та реалізувати індивідуальне завдання. Матриці повинні складатися як наймеш із 5000 елементів.

Індивідуальне завдання:

Текст програми на мові Java:

Graph.java

package graphs; import java.util.Random; class Graph { private int[][] incidentMatrix; private int[][] adjacencyMatrix; final int N; private int[] used; Graph(int N){ this.N = N; adjacencyMatrix = fillMatrix(N); used = new int[N]; toIncidentMatrix(); } Graph(int[][] adjacencyMatrix){ this.adjacencyMatrix = adjacencyMatrix; this.N = adjacencyMatrix.length; used = new int[N]; } public void setAdjacencyMatrix(int[][] adjacencyMatrix){ this.adjacencyMatrix = adjacencyMatrix; } public int[][] getIncidentMatrix(){ return incidentMatrix; } public int[][] getAdjacencyMatrix(){ return adjacencyMatrix; } public int getN(){ return N; } public int[] getUsed(){ return used; } public void show(int[][] matrix, String header){ System.out.println(header); for(int i = 0; i < matrix.length; i++){ for(int j = 0; j < matrix[i].length; j++){ System.out.print(matrix[i][j] + " "); } System.out.println(); } } private int getNumberOfRibs(){ int ribs = 0; for (int i = 0; i < getN(); i++) { for (int j = 0; j < i; j++){ if (getAdjacencyMatrix()[i][j] == 1){ ribs++; } } } return ribs; } private void toIncidentMatrix(){ int ribs = getNumberOfRibs(); int n = 0; this.incidentMatrix = new int[getN()][ribs]; for (int i = 0; i < getN(); i++) { for (int j = 0; j < i; j++) { if (getAdjacencyMatrix()[i][j] == 1) { this.incidentMatrix[i][n] = 1; this.incidentMatrix[j][n] = 1; n++; } } } } public void DFS(int v){ this.used[v] = 1; System.out.println(v+1 + " is visited"); for(int i = 0; i < getN(); i++){ if(getUsed()[i] != 1 && getAdjacencyMatrix()[v][i] == 1){ DFS(i); } } } private static int[][] fillMatrix(int N){ int[][] matrix = new int[N][N]; Random rand = new Random(); for(int i = 0; i < N; i++){ for(int j = i+1; j < N; j++){ matrix[i][j] = rand.nextInt(2); matrix[j][i] = matrix[i][j]; } } return matrix; } }

Результати виконання програми:

Рис. 1. Заповнення графа, збереження у вигляді матриці суміжності та інцидентності, обхід в глибину

Висновок: програма призначена для роботи з графами. Програма реалізує завдання зі збереження графу у вигляді матриці суміжності, інцидентності і здійснює пошук в глибину. На цій лабораторній роботі було набуто навичок програмування графів. Програма написана на мові Java у середовищі IntelliJ.