
Лабораторна робота 8 - ТПРІС
.docx
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ”ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра інформаційних
систем та мереж
Звіт з лабораторної роботи №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.