@raikuxq/alg-ds 1.1.6 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +71 -88
  2. package/lib/app/algorithms/binary-search.d.ts +5 -0
  3. package/lib/app/algorithms/binary-search.js +27 -0
  4. package/lib/app/algorithms/factorial.d.ts +9 -0
  5. package/lib/app/algorithms/factorial.js +17 -0
  6. package/lib/app/algorithms/fibonacci.d.ts +9 -0
  7. package/lib/app/algorithms/fibonacci.js +17 -0
  8. package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.d.ts +35 -0
  9. package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.js +83 -0
  10. package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.d.ts +28 -0
  11. package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.js +70 -0
  12. package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.d.ts +28 -0
  13. package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.js +70 -0
  14. package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.d.ts +32 -0
  15. package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.js +97 -0
  16. package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.d.ts +6 -0
  17. package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.js +13 -0
  18. package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.d.ts +6 -0
  19. package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.js +13 -0
  20. package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.d.ts +6 -0
  21. package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.js +13 -0
  22. package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.d.ts +19 -0
  23. package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.js +28 -0
  24. package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.d.ts +32 -0
  25. package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.js +48 -0
  26. package/lib/app/algorithms/graph/searching/hasPath.d.ts +9 -0
  27. package/lib/app/algorithms/graph/searching/hasPath.js +30 -0
  28. package/lib/app/algorithms/graph/searching/shortestPath.d.ts +9 -0
  29. package/lib/app/algorithms/graph/searching/shortestPath.js +30 -0
  30. package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.d.ts +2 -0
  31. package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.js +14 -0
  32. package/lib/app/algorithms/memoize.d.ts +5 -0
  33. package/lib/app/algorithms/memoize.js +22 -0
  34. package/lib/app/algorithms/sorts/bubble-sort.d.ts +9 -0
  35. package/lib/app/algorithms/sorts/bubble-sort.js +23 -0
  36. package/lib/app/algorithms/sorts/insertion-sort.d.ts +9 -0
  37. package/lib/app/algorithms/sorts/insertion-sort.js +25 -0
  38. package/lib/app/algorithms/sorts/merge-sort.d.ts +9 -0
  39. package/lib/app/algorithms/sorts/merge-sort.js +61 -0
  40. package/lib/app/algorithms/sorts/quick-sort.d.ts +9 -0
  41. package/lib/app/algorithms/sorts/quick-sort.js +45 -0
  42. package/lib/app/algorithms/sorts/select-sort.d.ts +9 -0
  43. package/lib/app/algorithms/sorts/select-sort.js +20 -0
  44. package/lib/app/algorithms/transpose-matrix.d.ts +5 -0
  45. package/lib/app/algorithms/transpose-matrix.js +18 -0
  46. package/lib/app/constants.d.ts +2 -0
  47. package/lib/app/constants.js +6 -0
  48. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +15 -0
  49. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +53 -0
  50. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +60 -0
  51. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +36 -0
  52. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +13 -0
  53. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +59 -0
  54. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +70 -0
  55. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +271 -0
  56. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +16 -0
  57. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +70 -0
  58. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +57 -0
  59. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +235 -0
  60. package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.d.ts +6 -0
  61. package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.js +22 -0
  62. package/lib/app/data-structures/Graph/AbstractGraph.d.ts +84 -0
  63. package/lib/app/data-structures/Graph/AbstractGraph.js +143 -0
  64. package/lib/app/data-structures/Graph/DirectedGraph.d.ts +24 -0
  65. package/lib/app/data-structures/Graph/DirectedGraph.js +86 -0
  66. package/lib/app/data-structures/Graph/GraphEdge.d.ts +16 -0
  67. package/lib/app/data-structures/Graph/GraphEdge.js +43 -0
  68. package/lib/app/data-structures/Graph/UndirectedGraph.d.ts +28 -0
  69. package/lib/app/data-structures/Graph/UndirectedGraph.js +103 -0
  70. package/lib/app/data-structures/Graph/_helpers/createGraph.d.ts +6 -0
  71. package/lib/app/data-structures/Graph/_helpers/createGraph.js +22 -0
  72. package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.d.ts +7 -0
  73. package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.js +42 -0
  74. package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.d.ts +4 -0
  75. package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.js +67 -0
  76. package/lib/app/data-structures/HashTable/HashTable.d.ts +73 -0
  77. package/lib/app/data-structures/HashTable/HashTable.js +171 -0
  78. package/lib/app/data-structures/HashTable/HashTableNode.d.ts +11 -0
  79. package/lib/app/data-structures/HashTable/HashTableNode.js +39 -0
  80. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +125 -0
  81. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +241 -0
  82. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +20 -0
  83. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +41 -0
  84. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +48 -0
  85. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +151 -0
  86. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +25 -0
  87. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +65 -0
  88. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +52 -0
  89. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +138 -0
  90. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +7 -0
  91. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +29 -0
  92. package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.d.ts +3 -0
  93. package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.js +19 -0
  94. package/lib/app/data-structures/LoopedArray/LoopedArray.d.ts +83 -0
  95. package/lib/app/data-structures/LoopedArray/LoopedArray.js +169 -0
  96. package/lib/app/data-structures/Queue/Queue.d.ts +50 -0
  97. package/lib/app/data-structures/Queue/Queue.js +85 -0
  98. package/lib/app/data-structures/Stack/Stack.d.ts +50 -0
  99. package/lib/app/data-structures/Stack/Stack.js +85 -0
  100. package/lib/app/exceptions/CollectionIsEmptyException.d.ts +4 -0
  101. package/lib/app/exceptions/CollectionIsEmptyException.js +28 -0
  102. package/lib/app/exceptions/CollectionIsFullException.d.ts +4 -0
  103. package/lib/app/exceptions/CollectionIsFullException.js +28 -0
  104. package/lib/app/exceptions/IndexOutOfBoundsException.d.ts +4 -0
  105. package/lib/app/exceptions/IndexOutOfBoundsException.js +28 -0
  106. package/lib/app/exceptions/IsAlreadyExistsException.d.ts +4 -0
  107. package/lib/app/exceptions/IsAlreadyExistsException.js +28 -0
  108. package/lib/app/exceptions/IsNotFoundException.d.ts +4 -0
  109. package/lib/app/exceptions/IsNotFoundException.js +28 -0
  110. package/lib/app/exceptions/ValueOutOfRangeException.d.ts +4 -0
  111. package/lib/app/exceptions/ValueOutOfRangeException.js +28 -0
  112. package/lib/app/exceptions/base/IllegalArgumentException.d.ts +3 -0
  113. package/lib/app/exceptions/base/IllegalArgumentException.js +27 -0
  114. package/lib/app/exceptions/base/IllegalStateException.d.ts +3 -0
  115. package/lib/app/exceptions/base/IllegalStateException.js +27 -0
  116. package/lib/app/types/EnumBinarySearchTreeType.d.ts +4 -0
  117. package/lib/app/types/EnumBinarySearchTreeType.js +9 -0
  118. package/lib/app/types/EnumGraphTraversalType.d.ts +5 -0
  119. package/lib/app/types/EnumGraphTraversalType.js +10 -0
  120. package/lib/app/types/EnumGraphType.d.ts +4 -0
  121. package/lib/app/types/EnumGraphType.js +9 -0
  122. package/lib/app/types/EnumLinkedListType.d.ts +4 -0
  123. package/lib/app/types/EnumLinkedListType.js +9 -0
  124. package/lib/app/types/EnumRandomGenerationFormat.d.ts +4 -0
  125. package/lib/app/types/EnumRandomGenerationFormat.js +9 -0
  126. package/lib/app/types/EnumSortType.d.ts +7 -0
  127. package/lib/app/types/EnumSortType.js +12 -0
  128. package/lib/app/types/EnumTreeTraversalType.d.ts +5 -0
  129. package/lib/app/types/EnumTreeTraversalType.js +10 -0
  130. package/lib/app/types/FnCompareTwo.d.ts +1 -0
  131. package/lib/app/types/FnCompareTwo.js +3 -0
  132. package/lib/app/types/FnToMemoize.d.ts +1 -0
  133. package/lib/app/types/FnToMemoize.js +3 -0
  134. package/lib/app/types/IArrayFacade.d.ts +4 -0
  135. package/lib/app/types/IArrayFacade.js +3 -0
  136. package/lib/app/types/IBiDirectIterable.d.ts +5 -0
  137. package/lib/app/types/IBiDirectIterable.js +3 -0
  138. package/lib/app/types/IBiDirectIterator.d.ts +11 -0
  139. package/lib/app/types/IBiDirectIterator.js +3 -0
  140. package/lib/app/types/IBinaryTree.d.ts +12 -0
  141. package/lib/app/types/IBinaryTree.js +3 -0
  142. package/lib/app/types/IConvertableToArray.d.ts +4 -0
  143. package/lib/app/types/IConvertableToArray.js +3 -0
  144. package/lib/app/types/IGraph.d.ts +14 -0
  145. package/lib/app/types/IGraph.js +3 -0
  146. package/lib/app/types/IGraphIterationStrategy.d.ts +5 -0
  147. package/lib/app/types/IGraphIterationStrategy.js +3 -0
  148. package/lib/app/types/IGraphIterator.d.ts +11 -0
  149. package/lib/app/types/IGraphIterator.js +3 -0
  150. package/lib/app/types/IIterable.d.ts +4 -0
  151. package/lib/app/types/IIterable.js +3 -0
  152. package/lib/app/types/IIterator.d.ts +14 -0
  153. package/lib/app/types/IIterator.js +3 -0
  154. package/lib/app/types/IKeyValueStorage.d.ts +8 -0
  155. package/lib/app/types/IKeyValueStorage.js +3 -0
  156. package/lib/app/types/ILinearStorage.d.ts +11 -0
  157. package/lib/app/types/ILinearStorage.js +3 -0
  158. package/lib/app/types/ILinearStorageRA.d.ts +13 -0
  159. package/lib/app/types/ILinearStorageRA.js +3 -0
  160. package/lib/app/types/ILinkedList.d.ts +4 -0
  161. package/lib/app/types/ILinkedList.js +3 -0
  162. package/lib/app/types/TypeArrayMatrix.d.ts +1 -0
  163. package/lib/app/types/TypeArrayMatrix.js +3 -0
  164. package/lib/app/utils.d.ts +37 -0
  165. package/lib/app/utils.js +114 -0
  166. package/lib/exports/algorithms.d.ts +16 -0
  167. package/lib/exports/algorithms.js +36 -0
  168. package/lib/exports/constants.d.ts +2 -0
  169. package/lib/exports/constants.js +7 -0
  170. package/lib/exports/data-structures.d.ts +11 -0
  171. package/lib/exports/data-structures.js +24 -0
  172. package/lib/exports/helpers.d.ts +6 -0
  173. package/lib/exports/helpers.js +14 -0
  174. package/lib/exports/sorts.d.ts +6 -0
  175. package/lib/exports/sorts.js +14 -0
  176. package/lib/exports/types.d.ts +16 -0
  177. package/lib/exports/types.js +34 -0
  178. package/lib/exports/utils.d.ts +3 -0
  179. package/lib/exports/utils.js +14 -0
  180. package/lib/exports.d.ts +53 -0
  181. package/lib/exports.js +105 -0
  182. package/lib/index.d.ts +3 -0
  183. package/lib/index.js +5 -0
  184. package/package.json +11 -6
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBinaryTree = void 0;
4
+ var EnumBinarySearchTreeType_1 = require("../../../types/EnumBinarySearchTreeType");
5
+ var BinarySearchTree_1 = require("../BinarySearchTree/BinarySearchTree");
6
+ var RandBinarySearchTree_1 = require("../RandBinarySearchTree/RandBinarySearchTree");
7
+ /**
8
+ * Returns binary tree by type
9
+ */
10
+ exports.createBinaryTree = function (type) {
11
+ var binaryTree;
12
+ switch (type) {
13
+ case EnumBinarySearchTreeType_1.EnumBinarySearchTreeType.BST:
14
+ binaryTree = new BinarySearchTree_1.default();
15
+ break;
16
+ case EnumBinarySearchTreeType_1.EnumBinarySearchTreeType.RANDOMIZED_BST:
17
+ binaryTree = new RandBinarySearchTree_1.default();
18
+ break;
19
+ }
20
+ return binaryTree;
21
+ };
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQmluYXJ5VHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0JpbmFyeVRyZWUvX2hlbHBlcnMvY3JlYXRlQmluYXJ5VHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvRkFBbUY7QUFDbkYseUVBQW9FO0FBQ3BFLHFGQUFnRjtBQUdoRjs7R0FFRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUcsVUFDOUIsSUFBOEI7SUFFOUIsSUFBSSxVQUEwQixDQUFDO0lBRS9CLFFBQVEsSUFBSSxFQUFFO1FBQ1osS0FBSyxtREFBd0IsQ0FBQyxHQUFHO1lBQy9CLFVBQVUsR0FBRyxJQUFJLDBCQUFnQixFQUFFLENBQUM7WUFDcEMsTUFBTTtRQUNSLEtBQUssbURBQXdCLENBQUMsY0FBYztZQUMxQyxVQUFVLEdBQUcsSUFBSSw4QkFBb0IsRUFBRSxDQUFDO1lBQ3hDLE1BQU07S0FDVDtJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMsQ0FBQyJ9
@@ -0,0 +1,84 @@
1
+ import GraphEdge from "./GraphEdge";
2
+ export default abstract class AbstractGraph<T> {
3
+ protected _vertices: Map<T, Array<T>>;
4
+ protected _edges: Array<GraphEdge<T>>;
5
+ /**
6
+ * Created empty instance
7
+ */
8
+ protected constructor();
9
+ /**
10
+ * Find edge by its from and to vertices
11
+ */
12
+ protected abstract getEdgeByValue(from: T, to: T): GraphEdge<T>;
13
+ /**
14
+ * Get vertices list in array format
15
+ */
16
+ protected getVerticesArrayFormat(): Array<T>;
17
+ /**
18
+ * Find vertex in vertices list by its data
19
+ * @throws when vertex was not found
20
+ */
21
+ protected tryFindVertex(data: T): T;
22
+ /**
23
+ * Update edge weight between from and to vertices
24
+ */
25
+ protected updateEdgeWeight(from: T, to: T, weight: number): void;
26
+ /**
27
+ * Will remove all vertex relations with others vertices
28
+ */
29
+ protected cascadeRemoveVertexRelations(vertexToRemove: T): void;
30
+ /**
31
+ * Will remove all vertices edges with vertex to remove
32
+ */
33
+ protected cascadeRemoveVertexEdges(vertexToRemove: T): void;
34
+ /**
35
+ * Get sum of all graph edges
36
+ */
37
+ weight(): number;
38
+ /**
39
+ * Get array of vertices
40
+ */
41
+ vertices(): Array<T>;
42
+ /**
43
+ * Get vertices count
44
+ */
45
+ verticesCount(): number;
46
+ /**
47
+ * Get edges count
48
+ */
49
+ edgesCount(): number;
50
+ /**
51
+ * Add vertex
52
+ * @throws when vertex is already exists
53
+ */
54
+ addVertex(data: T): this;
55
+ /**
56
+ * Remove vertex
57
+ * @throws when vertex is already does not exist
58
+ */
59
+ removeVertex(data: T): this;
60
+ /**
61
+ * Add edge between two vertices
62
+ */
63
+ abstract addEdge(from: T, to: T, weight?: number): this;
64
+ /**
65
+ * Remove edge between two vertices
66
+ */
67
+ abstract removeEdge(from: T, to: T): this;
68
+ /**
69
+ * Get vertex neighbors by its data
70
+ */
71
+ getVertexNeighbors(data: T): Array<T>;
72
+ /**
73
+ * Check if graph has vertex
74
+ */
75
+ hasVertex(data: T): boolean;
76
+ /**
77
+ * Check if graph has edge between from and to vertices
78
+ */
79
+ hasEdge(from: T, to: T): boolean;
80
+ /**
81
+ * Get edge weight between from and to vertices
82
+ */
83
+ getEdgeWeight(from: T, to: T): number;
84
+ }
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var IsNotFoundException_1 = require("../../exceptions/IsNotFoundException");
4
+ var IsAlreadyExistsException_1 = require("../../exceptions/IsAlreadyExistsException");
5
+ var AbstractGraph = /** @class */ (function () {
6
+ /**
7
+ * Created empty instance
8
+ */
9
+ function AbstractGraph() {
10
+ this._vertices = new Map();
11
+ this._edges = new Array();
12
+ }
13
+ /**
14
+ * Get vertices list in array format
15
+ */
16
+ AbstractGraph.prototype.getVerticesArrayFormat = function () {
17
+ return Array.from(this._vertices.keys());
18
+ };
19
+ /**
20
+ * Find vertex in vertices list by its data
21
+ * @throws when vertex was not found
22
+ */
23
+ AbstractGraph.prototype.tryFindVertex = function (data) {
24
+ var isExists = this._vertices.has(data);
25
+ if (!isExists) {
26
+ throw new IsNotFoundException_1.default("Vertex not found");
27
+ }
28
+ return data;
29
+ };
30
+ /**
31
+ * Update edge weight between from and to vertices
32
+ */
33
+ AbstractGraph.prototype.updateEdgeWeight = function (from, to, weight) {
34
+ var edge = this.getEdgeByValue(from, to);
35
+ edge.weight = weight;
36
+ };
37
+ /**
38
+ * Will remove all vertex relations with others vertices
39
+ */
40
+ AbstractGraph.prototype.cascadeRemoveVertexRelations = function (vertexToRemove) {
41
+ var _this = this;
42
+ this.getVerticesArrayFormat().forEach(function (neighbor) {
43
+ var neighborVertexNeighbors = _this._vertices.get(neighbor);
44
+ if (neighborVertexNeighbors) {
45
+ var neighborVertexFilteredNeighbors = neighborVertexNeighbors.filter(function (newNeighbor) { return newNeighbor !== vertexToRemove; });
46
+ _this._vertices.set(neighbor, neighborVertexFilteredNeighbors);
47
+ }
48
+ });
49
+ };
50
+ /**
51
+ * Will remove all vertices edges with vertex to remove
52
+ */
53
+ AbstractGraph.prototype.cascadeRemoveVertexEdges = function (vertexToRemove) {
54
+ this._edges = this._edges.filter(function (edge) {
55
+ var shouldBeDeleted = edge.toVertex === vertexToRemove || edge.fromVertex === vertexToRemove;
56
+ return !shouldBeDeleted;
57
+ });
58
+ };
59
+ /**
60
+ * Get sum of all graph edges
61
+ */
62
+ AbstractGraph.prototype.weight = function () {
63
+ return this._edges.reduce(function (acc, edge) { return acc + edge.weight; }, 0);
64
+ };
65
+ /**
66
+ * Get array of vertices
67
+ */
68
+ AbstractGraph.prototype.vertices = function () {
69
+ return this.getVerticesArrayFormat().map(function (vertex) { return vertex; });
70
+ };
71
+ /**
72
+ * Get vertices count
73
+ */
74
+ AbstractGraph.prototype.verticesCount = function () {
75
+ return this.vertices().length;
76
+ };
77
+ /**
78
+ * Get edges count
79
+ */
80
+ AbstractGraph.prototype.edgesCount = function () {
81
+ return this._edges.length;
82
+ };
83
+ /**
84
+ * Add vertex
85
+ * @throws when vertex is already exists
86
+ */
87
+ AbstractGraph.prototype.addVertex = function (data) {
88
+ if (this.hasVertex(data)) {
89
+ throw new IsAlreadyExistsException_1.default("Vertex is already exist");
90
+ }
91
+ this._vertices.set(data, new Array());
92
+ return this;
93
+ };
94
+ /**
95
+ * Remove vertex
96
+ * @throws when vertex is already does not exist
97
+ */
98
+ AbstractGraph.prototype.removeVertex = function (data) {
99
+ try {
100
+ var vertexToRemove = this.tryFindVertex(data);
101
+ this.cascadeRemoveVertexEdges(vertexToRemove);
102
+ this.cascadeRemoveVertexRelations(vertexToRemove);
103
+ this._vertices.delete(vertexToRemove);
104
+ }
105
+ catch (e) {
106
+ throw new IsNotFoundException_1.default("Vertex does not exist already");
107
+ }
108
+ return this;
109
+ };
110
+ /**
111
+ * Get vertex neighbors by its data
112
+ */
113
+ AbstractGraph.prototype.getVertexNeighbors = function (data) {
114
+ var vertex = this.tryFindVertex(data);
115
+ return this._vertices.get(vertex) || [];
116
+ };
117
+ /**
118
+ * Check if graph has vertex
119
+ */
120
+ AbstractGraph.prototype.hasVertex = function (data) {
121
+ return this._vertices.has(data);
122
+ };
123
+ /**
124
+ * Check if graph has edge between from and to vertices
125
+ */
126
+ AbstractGraph.prototype.hasEdge = function (from, to) {
127
+ return Boolean(this._edges.find(function (edge) {
128
+ return edge.fromVertex === from && edge.toVertex === to;
129
+ }));
130
+ };
131
+ /**
132
+ * Get edge weight between from and to vertices
133
+ */
134
+ AbstractGraph.prototype.getEdgeWeight = function (from, to) {
135
+ var fromVertex = this.tryFindVertex(from);
136
+ var toVertex = this.tryFindVertex(to);
137
+ var edge = this.getEdgeByValue(fromVertex, toVertex);
138
+ return edge.weight;
139
+ };
140
+ return AbstractGraph;
141
+ }());
142
+ exports.default = AbstractGraph;
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RHcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0dyYXBoL0Fic3RyYWN0R3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSw0RUFBdUU7QUFDdkUsc0ZBQWlGO0FBRWpGO0lBSUU7O09BRUc7SUFDSDtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFnQixDQUFDO0lBQzFDLENBQUM7SUFPRDs7T0FFRztJQUNPLDhDQUFzQixHQUFoQztRQUNFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNPLHFDQUFhLEdBQXZCLFVBQXdCLElBQU87UUFDN0IsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE1BQU0sSUFBSSw2QkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDTyx3Q0FBZ0IsR0FBMUIsVUFBMkIsSUFBTyxFQUFFLEVBQUssRUFBRSxNQUFjO1FBQ3ZELElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNPLG9EQUE0QixHQUF0QyxVQUF1QyxjQUFpQjtRQUF4RCxpQkFZQztRQVhDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFDLFFB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
@@ -0,0 +1,24 @@
1
+ import AbstractGraph from "./AbstractGraph";
2
+ import GraphEdge from "./GraphEdge";
3
+ /**
4
+ * Directed graph - data structure where edges with same pair of vertices are not equal
5
+ * @example A-B is not the same as B-A
6
+ */
7
+ export default class DirectedGraph<T> extends AbstractGraph<T> {
8
+ /**
9
+ * @inheritDoc
10
+ */
11
+ constructor();
12
+ /**
13
+ * @inheritDoc
14
+ */
15
+ protected getEdgeByValue(from: T, to: T): GraphEdge<T>;
16
+ /**
17
+ * @inheritDoc
18
+ */
19
+ addEdge(from: T, to: T, weight?: number): this;
20
+ /**
21
+ * @inheritDoc
22
+ */
23
+ removeEdge(from: T, to: T): this;
24
+ }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ extendStatics(d, b);
11
+ function __() { this.constructor = d; }
12
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
+ };
14
+ })();
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ var AbstractGraph_1 = require("./AbstractGraph");
17
+ var GraphEdge_1 = require("./GraphEdge");
18
+ var IsNotFoundException_1 = require("../../exceptions/IsNotFoundException");
19
+ /**
20
+ * Directed graph - data structure where edges with same pair of vertices are not equal
21
+ * @example A-B is not the same as B-A
22
+ */
23
+ var DirectedGraph = /** @class */ (function (_super) {
24
+ __extends(DirectedGraph, _super);
25
+ /**
26
+ * @inheritDoc
27
+ */
28
+ function DirectedGraph() {
29
+ return _super.call(this) || this;
30
+ }
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ DirectedGraph.prototype.getEdgeByValue = function (from, to) {
35
+ var edge = this._edges.find(function (edge) { return edge.fromVertex === from && edge.toVertex === to; });
36
+ if (!edge) {
37
+ throw new IsNotFoundException_1.default("Edge not found");
38
+ }
39
+ return edge;
40
+ };
41
+ /**
42
+ * @inheritDoc
43
+ */
44
+ DirectedGraph.prototype.addEdge = function (from, to, weight) {
45
+ var _a;
46
+ try {
47
+ var fromVertex = this.tryFindVertex(from);
48
+ var toVertex = this.tryFindVertex(to);
49
+ if (this.hasEdge(fromVertex, toVertex)) {
50
+ if (typeof weight === "number") {
51
+ this.updateEdgeWeight(fromVertex, toVertex, weight);
52
+ }
53
+ }
54
+ else {
55
+ var edge = new GraphEdge_1.default(fromVertex, toVertex, weight);
56
+ this._edges.push(edge);
57
+ (_a = this._vertices.get(fromVertex)) === null || _a === void 0 ? void 0 : _a.push(toVertex);
58
+ }
59
+ }
60
+ catch (_b) {
61
+ throw new IsNotFoundException_1.default("Edge cannot be added because one of vertices was not found");
62
+ }
63
+ return this;
64
+ };
65
+ /**
66
+ * @inheritDoc
67
+ */
68
+ DirectedGraph.prototype.removeEdge = function (from, to) {
69
+ try {
70
+ var fromVertex = this.tryFindVertex(from);
71
+ var toVertex_1 = this.tryFindVertex(to);
72
+ var edgeToRemove_1 = this.getEdgeByValue(fromVertex, toVertex_1);
73
+ var fromVertexNeighbors = this._vertices.get(fromVertex) || [];
74
+ var fromNewNeighbors = fromVertexNeighbors.filter(function (vertex) { return toVertex_1 !== vertex; });
75
+ this._vertices.set(fromVertex, fromNewNeighbors);
76
+ this._edges = this._edges.filter(function (edge) { return edge !== edgeToRemove_1; });
77
+ }
78
+ catch (_a) {
79
+ throw new IsNotFoundException_1.default("Edge cannot be removed because one of vertices was not found");
80
+ }
81
+ return this;
82
+ };
83
+ return DirectedGraph;
84
+ }(AbstractGraph_1.default));
85
+ exports.default = DirectedGraph;
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlyZWN0ZWRHcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0dyYXBoL0RpcmVjdGVkR3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQTRDO0FBQzVDLHlDQUFvQztBQUNwQyw0RUFBdUU7QUFFdkU7OztHQUdHO0FBQ0g7SUFBOEMsaUNBQWdCO0lBQzVEOztPQUVHO0lBQ0g7ZUFDRSxpQkFBTztJQUNULENBQUM7SUFFRDs7T0FFRztJQUNPLHNDQUFjLEdBQXhCLFVBQXlCLElBQU8sRUFBRSxFQUFLO1FBQ3JDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMzQixVQUFDLElBQWtCLElBQUssT0FBQSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsRUFBaEQsQ0FBZ0QsQ0FDekUsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxNQUFNLElBQUksNkJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNqRDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksK0JBQU8sR0FBZCxVQUFlLElBQU8sRUFBRSxFQUFLLEVBQUUsTUFBZTs7UUFDNUMsSUFBSTtZQUNGLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV4QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUN0QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ3JEO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBTSxJQUFJLEdBQUcsSUFBSSxtQkFBUyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXpELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixNQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQywwQ0FBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2FBQ2hEO1NBQ0Y7UUFBQyxXQUFNO1lBQ04sTUFBTSxJQUFJLDZCQUFtQixDQUMzQiw0REFBNEQsQ0FDN0QsQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQ0FBVSxHQUFqQixVQUFrQixJQUFPLEVBQUUsRUFBSztRQUM5QixJQUFJO1lBQ0YsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFNLFVBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLElBQU0sY0FBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVEsQ0FBQyxDQUFDO1lBRS9ELElBQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pFLElBQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUNqRCxVQUFDLE1BQVMsSUFBSyxPQUFBLFVBQVEsS0FBSyxNQUFNLEVBQW5CLENBQW1CLENBQ25DLENBQUM7WUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUM5QixVQUFDLElBQWtCLElBQUssT0FBQSxJQUFJLEtBQUssY0FBWSxFQUFyQixDQUFxQixDQUM5QyxDQUFDO1NBQ0g7UUFBQyxXQUFNO1lBQ04sTUFBTSxJQUFJLDZCQUFtQixDQUMzQiw4REFBOEQsQ0FDL0QsQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0gsb0JBQUM7QUFBRCxDQUFDLEFBNUVELENBQThDLHVCQUFhLEdBNEUxRCJ9
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Graph edge between two vertices
3
+ */
4
+ export default class GraphEdge<T> {
5
+ private readonly _fromVertex;
6
+ private readonly _toVertex;
7
+ private _weight;
8
+ /**
9
+ * Create instance with linked "from" and "to" vertices
10
+ */
11
+ constructor(fromVertex: T, toVertex: T, weight?: number);
12
+ get fromVertex(): T;
13
+ get toVertex(): T;
14
+ get weight(): number;
15
+ set weight(value: number);
16
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Graph edge between two vertices
5
+ */
6
+ var GraphEdge = /** @class */ (function () {
7
+ /**
8
+ * Create instance with linked "from" and "to" vertices
9
+ */
10
+ function GraphEdge(fromVertex, toVertex, weight) {
11
+ if (weight === void 0) { weight = 0; }
12
+ this._fromVertex = fromVertex;
13
+ this._toVertex = toVertex;
14
+ this._weight = weight;
15
+ }
16
+ Object.defineProperty(GraphEdge.prototype, "fromVertex", {
17
+ get: function () {
18
+ return this._fromVertex;
19
+ },
20
+ enumerable: false,
21
+ configurable: true
22
+ });
23
+ Object.defineProperty(GraphEdge.prototype, "toVertex", {
24
+ get: function () {
25
+ return this._toVertex;
26
+ },
27
+ enumerable: false,
28
+ configurable: true
29
+ });
30
+ Object.defineProperty(GraphEdge.prototype, "weight", {
31
+ get: function () {
32
+ return this._weight;
33
+ },
34
+ set: function (value) {
35
+ this._weight = value;
36
+ },
37
+ enumerable: false,
38
+ configurable: true
39
+ });
40
+ return GraphEdge;
41
+ }());
42
+ exports.default = GraphEdge;
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvR3JhcGhFZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7O0dBRUc7QUFDSDtJQUtFOztPQUVHO0lBQ0gsbUJBQW1CLFVBQWEsRUFBRSxRQUFXLEVBQUUsTUFBVTtRQUFWLHVCQUFBLEVBQUEsVUFBVTtRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRUQsc0JBQUksaUNBQVU7YUFBZDtZQUNFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLCtCQUFRO2FBQVo7WUFDRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEIsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSw2QkFBTTthQUFWO1lBQ0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3RCLENBQUM7YUFFRCxVQUFXLEtBQWE7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQzs7O09BSkE7SUFLSCxnQkFBQztBQUFELENBQUMsQUE3QkQsSUE2QkMifQ==
@@ -0,0 +1,28 @@
1
+ import AbstractGraph from "./AbstractGraph";
2
+ import GraphEdge from "./GraphEdge";
3
+ /**
4
+ * Undirected graph - data structure where edges with same pair of vertices are equal
5
+ * @example A-B is same as B-A
6
+ */
7
+ export default class UndirectedGraph<T> extends AbstractGraph<T> {
8
+ /**
9
+ * @inheritDoc
10
+ */
11
+ constructor();
12
+ /**
13
+ * @inheritDoc
14
+ */
15
+ protected getEdgeByValue(from: T, to: T): GraphEdge<T>;
16
+ /**
17
+ * @inheritDoc
18
+ */
19
+ hasEdge(from: T, to: T): boolean;
20
+ /**
21
+ * @inheritDoc
22
+ */
23
+ addEdge(from: T, to: T, weight?: number): this;
24
+ /**
25
+ * @inheritDoc
26
+ */
27
+ removeEdge(from: T, to: T): this;
28
+ }
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ extendStatics(d, b);
11
+ function __() { this.constructor = d; }
12
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
+ };
14
+ })();
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ var AbstractGraph_1 = require("./AbstractGraph");
17
+ var GraphEdge_1 = require("./GraphEdge");
18
+ var IsNotFoundException_1 = require("../../exceptions/IsNotFoundException");
19
+ /**
20
+ * Undirected graph - data structure where edges with same pair of vertices are equal
21
+ * @example A-B is same as B-A
22
+ */
23
+ var UndirectedGraph = /** @class */ (function (_super) {
24
+ __extends(UndirectedGraph, _super);
25
+ /**
26
+ * @inheritDoc
27
+ */
28
+ function UndirectedGraph() {
29
+ return _super.call(this) || this;
30
+ }
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ UndirectedGraph.prototype.getEdgeByValue = function (from, to) {
35
+ var edge = this._edges.find(function (edge) {
36
+ return (edge.fromVertex === from && edge.toVertex === to) ||
37
+ (edge.fromVertex === to && edge.toVertex === from);
38
+ });
39
+ if (!edge) {
40
+ throw new IsNotFoundException_1.default("Edge not found");
41
+ }
42
+ return edge;
43
+ };
44
+ /**
45
+ * @inheritDoc
46
+ */
47
+ UndirectedGraph.prototype.hasEdge = function (from, to) {
48
+ return Boolean(this._edges.find(function (edge) {
49
+ return ((edge.fromVertex === from && edge.toVertex === to) ||
50
+ (edge.fromVertex === to && edge.toVertex === from));
51
+ }));
52
+ };
53
+ /**
54
+ * @inheritDoc
55
+ */
56
+ UndirectedGraph.prototype.addEdge = function (from, to, weight) {
57
+ var _a, _b;
58
+ try {
59
+ var fromVertex = this.tryFindVertex(from);
60
+ var toVertex = this.tryFindVertex(to);
61
+ /** When edge is already exist, we should only update its weight */
62
+ if (this.hasEdge(fromVertex, toVertex)) {
63
+ if (typeof weight === "number") {
64
+ this.updateEdgeWeight(fromVertex, toVertex, weight);
65
+ }
66
+ }
67
+ else {
68
+ var edge = new GraphEdge_1.default(fromVertex, toVertex, weight);
69
+ this._edges.push(edge);
70
+ (_a = this._vertices.get(fromVertex)) === null || _a === void 0 ? void 0 : _a.push(toVertex);
71
+ (_b = this._vertices.get(toVertex)) === null || _b === void 0 ? void 0 : _b.push(fromVertex);
72
+ }
73
+ }
74
+ catch (_c) {
75
+ throw new IsNotFoundException_1.default("Edge cannot be added because one of vertices was not found");
76
+ }
77
+ return this;
78
+ };
79
+ /**
80
+ * @inheritDoc
81
+ */
82
+ UndirectedGraph.prototype.removeEdge = function (from, to) {
83
+ try {
84
+ var fromVertex_1 = this.tryFindVertex(from);
85
+ var toVertex_1 = this.tryFindVertex(to);
86
+ var edgeToRemove_1 = this.getEdgeByValue(fromVertex_1, toVertex_1);
87
+ var fromVertexNeighbors = this._vertices.get(fromVertex_1) || [];
88
+ var toVertexNeighbors = this._vertices.get(toVertex_1) || [];
89
+ var fromNewNeighbors = fromVertexNeighbors.filter(function (vertex) { return toVertex_1 !== vertex; });
90
+ var toNewNeighbors = toVertexNeighbors.filter(function (vertex) { return fromVertex_1 !== vertex; });
91
+ this._vertices.set(fromVertex_1, fromNewNeighbors);
92
+ this._vertices.set(toVertex_1, toNewNeighbors);
93
+ this._edges = this._edges.filter(function (edge) { return edge !== edgeToRemove_1; });
94
+ }
95
+ catch (_a) {
96
+ throw new IsNotFoundException_1.default("Edge cannot be removed because one of vertices was not found");
97
+ }
98
+ return this;
99
+ };
100
+ return UndirectedGraph;
101
+ }(AbstractGraph_1.default));
102
+ exports.default = UndirectedGraph;
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5kaXJlY3RlZEdyYXBoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvVW5kaXJlY3RlZEdyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUE0QztBQUM1Qyx5Q0FBb0M7QUFDcEMsNEVBQXVFO0FBRXZFOzs7R0FHRztBQUNIO0lBQWdELG1DQUFnQjtJQUM5RDs7T0FFRztJQUNIO2VBQ0UsaUJBQU87SUFDVCxDQUFDO0lBRUQ7O09BRUc7SUFDTyx3Q0FBYyxHQUF4QixVQUF5QixJQUFPLEVBQUUsRUFBSztRQUNyQyxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDM0IsVUFBQyxJQUFrQjtZQUNqQixPQUFBLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUM7Z0JBQ2xELENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUM7UUFEbEQsQ0FDa0QsQ0FDckQsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxNQUFNLElBQUksNkJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNqRDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUNBQU8sR0FBZCxVQUFlLElBQU8sRUFBRSxFQUFLO1FBQzNCLE9BQU8sT0FBTyxDQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBSTtZQUNwQixPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQztnQkFDbEQsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLEVBQUUsSUFBSSxJQUFJ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
@@ -0,0 +1,6 @@
1
+ import IGraph from "../../../types/IGraph";
2
+ import { EnumGraphType } from "../../../types/EnumGraphType";
3
+ /**
4
+ * Returns graph by type
5
+ */
6
+ export declare const createGraph: <T>(type: EnumGraphType) => IGraph<T>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createGraph = void 0;
4
+ var DirectedGraph_1 = require("../DirectedGraph");
5
+ var UndirectedGraph_1 = require("../UndirectedGraph");
6
+ var EnumGraphType_1 = require("../../../types/EnumGraphType");
7
+ /**
8
+ * Returns graph by type
9
+ */
10
+ exports.createGraph = function (type) {
11
+ var graph;
12
+ switch (type) {
13
+ case EnumGraphType_1.EnumGraphType.Directed:
14
+ graph = new DirectedGraph_1.default();
15
+ break;
16
+ case EnumGraphType_1.EnumGraphType.Undirected:
17
+ graph = new UndirectedGraph_1.default();
18
+ break;
19
+ }
20
+ return graph;
21
+ };
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlR3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9faGVscGVycy9jcmVhdGVHcmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxrREFBNkM7QUFDN0Msc0RBQWlEO0FBQ2pELDhEQUE2RDtBQUU3RDs7R0FFRztBQUNVLFFBQUEsV0FBVyxHQUFHLFVBQUksSUFBbUI7SUFDaEQsSUFBSSxLQUFnQixDQUFDO0lBRXJCLFFBQVEsSUFBSSxFQUFFO1FBQ1osS0FBSyw2QkFBYSxDQUFDLFFBQVE7WUFDekIsS0FBSyxHQUFHLElBQUksdUJBQWEsRUFBRSxDQUFDO1lBQzVCLE1BQU07UUFDUixLQUFLLDZCQUFhLENBQUMsVUFBVTtZQUMzQixLQUFLLEdBQUcsSUFBSSx5QkFBZSxFQUFFLENBQUM7WUFDOUIsTUFBTTtLQUNUO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMifQ==
@@ -0,0 +1,7 @@
1
+ import IGraph from "../../../types/IGraph";
2
+ import { EnumGraphType } from "../../../types/EnumGraphType";
3
+ import { TypeArrayMatrix } from "../../../types/TypeArrayMatrix";
4
+ /**
5
+ * Creates a graph from N*N matrix that contains 1 in case of edge exists or 0 in case it does not
6
+ */
7
+ export declare const createGraphFromMatrix: <T>(matrix: TypeArrayMatrix, fieldsList: T[], type: EnumGraphType) => IGraph<T>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createGraphFromMatrix = void 0;
4
+ var EnumGraphType_1 = require("../../../types/EnumGraphType");
5
+ var createGraph_1 = require("./createGraph");
6
+ var constants_1 = require("../../../constants");
7
+ var IllegalArgumentException_1 = require("../../../exceptions/base/IllegalArgumentException");
8
+ var utils_1 = require("../../../utils");
9
+ /**
10
+ * Creates a graph from N*N matrix that contains 1 in case of edge exists or 0 in case it does not
11
+ */
12
+ exports.createGraphFromMatrix = function (matrix, fieldsList, type) {
13
+ if (!utils_1.checkIsArrayMatrix(matrix)) {
14
+ throw new IllegalArgumentException_1.default("Given array is not a matrix");
15
+ }
16
+ var graph = createGraph_1.createGraph(type);
17
+ fieldsList.forEach(function (fieldName) {
18
+ graph.addVertex(fieldName);
19
+ });
20
+ matrix.forEach(function (row, rowIndex) {
21
+ row.forEach(function (col, colIndex) {
22
+ var rowColState = matrix[rowIndex][colIndex];
23
+ var colRowState = matrix[colIndex][rowIndex];
24
+ if (type === EnumGraphType_1.EnumGraphType.Undirected) {
25
+ if (rowColState === constants_1.EDGE_EXISTS_STATE &&
26
+ colRowState === constants_1.EDGE_EXISTS_STATE) {
27
+ graph.addEdge(fieldsList[rowIndex], fieldsList[colIndex]);
28
+ }
29
+ }
30
+ if (type === EnumGraphType_1.EnumGraphType.Directed) {
31
+ if (rowColState === constants_1.EDGE_EXISTS_STATE) {
32
+ graph.addEdge(fieldsList[rowIndex], fieldsList[colIndex]);
33
+ }
34
+ if (colRowState === constants_1.EDGE_EXISTS_STATE) {
35
+ graph.addEdge(fieldsList[colIndex], fieldsList[rowIndex]);
36
+ }
37
+ }
38
+ });
39
+ });
40
+ return graph;
41
+ };
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlR3JhcGhGcm9tTWF0cml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvX2hlbHBlcnMvY3JlYXRlR3JhcGhGcm9tTWF0cml4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDhEQUE2RDtBQUU3RCw2Q0FBNEM7QUFDNUMsZ0RBQXVEO0FBQ3ZELDhGQUF5RjtBQUN6Rix3Q0FBb0Q7QUFFcEQ7O0dBRUc7QUFDVSxRQUFBLHFCQUFxQixHQUFHLFVBQ25DLE1BQXVCLEVBQ3ZCLFVBQW9CLEVBQ3BCLElBQW1CO0lBRW5CLElBQUksQ0FBQywwQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMvQixNQUFNLElBQUksa0NBQXdCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNuRTtJQUVELElBQU0sS0FBSyxHQUFjLHlCQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFDLFNBQVM7UUFDM0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFrQixFQUFFLFFBQWdCO1FBQ2xELEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFXLEVBQUUsUUFBZ0I7WUFDeEMsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9DLElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUUvQyxJQUFJLElBQUksS0FBSyw2QkFBYSxDQUFDLFVBQVUsRUFBRTtnQkFDckMsSUFDRSxXQUFXLEtBQUssNkJBQWlCO29CQUNqQyxXQUFXLEtBQUssNkJBQWlCLEVBQ2pDO29CQUNBLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDthQUNGO1lBRUQsSUFBSSxJQUFJLEtBQUssNkJBQWEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ25DLElBQUksV0FBVyxLQUFLLDZCQUFpQixFQUFFO29CQUNyQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDM0Q7Z0JBQ0QsSUFBSSxXQUFXLEtBQUssNkJBQWlCLEVBQUU7b0JBQ3JDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,4 @@
1
+ import IGraph from "../../../types/IGraph";
2
+ import { EnumGraphType } from "../../../types/EnumGraphType";
3
+ import { EnumRandomGenerationFormat } from "../../../types/EnumRandomGenerationFormat";
4
+ export declare const generateRandomGraph: (verticesCount: number, edgesCount: number, type?: EnumGraphType, format?: EnumRandomGenerationFormat) => IGraph<string>;