-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFloydWarshall.cpp
More file actions
90 lines (63 loc) · 2.02 KB
/
FloydWarshall.cpp
File metadata and controls
90 lines (63 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// FloydWarshall.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
#include <bits/stdc++.h>
using namespace std;
#define INF INT_MAX /*implementation defined*/
void printMatrix(int** matrix, int numberOfVert) {
for (int i = 0; i < numberOfVert; i++) {
for (int j = 0; j < numberOfVert; j++) {
if (matrix[i][j] == INF) {
cout << "INFINITY" << " ";
}
else {
cout << matrix[i][j] << " ";
}
}
cout << endl;
}
}
double FloydWarshall(int** matrix, int numberOfVert) {
double start_time = clock();
for (int k = 0; k < numberOfVert; k++) {
for (int i = 0; i < numberOfVert; i++) {
for (int j = 0; j < numberOfVert; j++) {
matrix[i][j] = min(matrix[i][j], matrix[i][k] + matrix[k][j]);
}
}
}
return (clock() - start_time) / 1000;
}
int intRand(int min, int max) {
int a = (int)(rand()) / INT_MAX * (max - min) + min;
return a;
}
double test(int numberOfVert) {
int** matrix = new int* [numberOfVert];
for (int i = 0; i < numberOfVert; i++) {
matrix[i] = new int[numberOfVert];
}
for (int i = 0; i < numberOfVert; i++) {
for (int j = 0; j < numberOfVert; j++) {
matrix[i][j] = rand() % 101 + 1;
}
}
for (int i = 0; i < numberOfVert; i++) {
matrix[i][i] = 0;
}
cout << "Old matrix" << endl;
printMatrix(matrix, numberOfVert);
double result = FloydWarshall(matrix, numberOfVert);
cout << "New matrix" << endl;
printMatrix(matrix, numberOfVert);
for (int i = 0; i < numberOfVert; i++) {
delete[] matrix[i];
}
delete[] matrix;
return result;
}
int main() {
int n;
cin >> n;
test(n);
return 0;
}