@raikuxq/alg-ds 1.1.6 → 1.1.7

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 (177) hide show
  1. package/lib/algorithms/binary-search.d.ts +5 -0
  2. package/lib/algorithms/binary-search.js +27 -0
  3. package/lib/algorithms/factorial.d.ts +9 -0
  4. package/lib/algorithms/factorial.js +17 -0
  5. package/lib/algorithms/fibonacci.d.ts +9 -0
  6. package/lib/algorithms/fibonacci.js +17 -0
  7. package/lib/algorithms/memoize.d.ts +5 -0
  8. package/lib/algorithms/memoize.js +22 -0
  9. package/lib/algorithms/sorts/bubble-sort.d.ts +9 -0
  10. package/lib/algorithms/sorts/bubble-sort.js +23 -0
  11. package/lib/algorithms/sorts/insertion-sort.d.ts +9 -0
  12. package/lib/algorithms/sorts/insertion-sort.js +25 -0
  13. package/lib/algorithms/sorts/merge-sort.d.ts +9 -0
  14. package/lib/algorithms/sorts/merge-sort.js +61 -0
  15. package/lib/algorithms/sorts/quick-sort.d.ts +9 -0
  16. package/lib/algorithms/sorts/quick-sort.js +45 -0
  17. package/lib/algorithms/sorts/select-sort.d.ts +9 -0
  18. package/lib/algorithms/sorts/select-sort.js +20 -0
  19. package/lib/algorithms/transpose-matrix.d.ts +5 -0
  20. package/lib/algorithms/transpose-matrix.js +18 -0
  21. package/lib/constants.d.ts +2 -0
  22. package/lib/constants.js +6 -0
  23. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +15 -0
  24. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +53 -0
  25. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +60 -0
  26. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +36 -0
  27. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +13 -0
  28. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +59 -0
  29. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +70 -0
  30. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +271 -0
  31. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +16 -0
  32. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +70 -0
  33. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +57 -0
  34. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +235 -0
  35. package/lib/data-structures/Graph/AbstractGraph.d.ts +84 -0
  36. package/lib/data-structures/Graph/AbstractGraph.js +143 -0
  37. package/lib/data-structures/Graph/DirectedGraph.d.ts +24 -0
  38. package/lib/data-structures/Graph/DirectedGraph.js +86 -0
  39. package/lib/data-structures/Graph/GraphEdge.d.ts +16 -0
  40. package/lib/data-structures/Graph/GraphEdge.js +43 -0
  41. package/lib/data-structures/Graph/UndirectedGraph.d.ts +28 -0
  42. package/lib/data-structures/Graph/UndirectedGraph.js +103 -0
  43. package/lib/data-structures/Graph/demo/generateRandomGraph.d.ts +4 -0
  44. package/lib/data-structures/Graph/demo/generateRandomGraph.js +66 -0
  45. package/lib/data-structures/Graph/iterator/AbstractGraphIterator.d.ts +35 -0
  46. package/lib/data-structures/Graph/iterator/AbstractGraphIterator.js +90 -0
  47. package/lib/data-structures/Graph/iterator/GraphIteratorBFS.d.ts +28 -0
  48. package/lib/data-structures/Graph/iterator/GraphIteratorBFS.js +70 -0
  49. package/lib/data-structures/Graph/iterator/GraphIteratorDFS.d.ts +28 -0
  50. package/lib/data-structures/Graph/iterator/GraphIteratorDFS.js +70 -0
  51. package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.d.ts +32 -0
  52. package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.js +99 -0
  53. package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.d.ts +19 -0
  54. package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.js +28 -0
  55. package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.d.ts +32 -0
  56. package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.js +48 -0
  57. package/lib/data-structures/Graph/searching/hasPath.d.ts +9 -0
  58. package/lib/data-structures/Graph/searching/hasPath.js +30 -0
  59. package/lib/data-structures/Graph/searching/shortestPath.d.ts +9 -0
  60. package/lib/data-structures/Graph/searching/shortestPath.js +30 -0
  61. package/lib/data-structures/Graph/strategy/BFSIterationStrategy.d.ts +6 -0
  62. package/lib/data-structures/Graph/strategy/BFSIterationStrategy.js +13 -0
  63. package/lib/data-structures/Graph/strategy/DFSIterationStrategy.d.ts +6 -0
  64. package/lib/data-structures/Graph/strategy/DFSIterationStrategy.js +13 -0
  65. package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.d.ts +6 -0
  66. package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.js +13 -0
  67. package/lib/data-structures/Graph/transposing/transposeDirectedGraph.d.ts +2 -0
  68. package/lib/data-structures/Graph/transposing/transposeDirectedGraph.js +14 -0
  69. package/lib/data-structures/HashTable/HashTable.d.ts +73 -0
  70. package/lib/data-structures/HashTable/HashTable.js +171 -0
  71. package/lib/data-structures/HashTable/HashTableNode.d.ts +11 -0
  72. package/lib/data-structures/HashTable/HashTableNode.js +39 -0
  73. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +125 -0
  74. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +241 -0
  75. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +20 -0
  76. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +41 -0
  77. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +48 -0
  78. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +151 -0
  79. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +25 -0
  80. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +65 -0
  81. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +52 -0
  82. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +138 -0
  83. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +7 -0
  84. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +29 -0
  85. package/lib/data-structures/LoopedArray/LoopedArray.d.ts +83 -0
  86. package/lib/data-structures/LoopedArray/LoopedArray.js +169 -0
  87. package/lib/data-structures/Queue/Queue.d.ts +50 -0
  88. package/lib/data-structures/Queue/Queue.js +85 -0
  89. package/lib/data-structures/Stack/Stack.d.ts +50 -0
  90. package/lib/data-structures/Stack/Stack.js +85 -0
  91. package/lib/exceptions/IllegalCapacityException.d.ts +4 -0
  92. package/lib/exceptions/IllegalCapacityException.js +28 -0
  93. package/lib/exceptions/IndexOutOfBoundsException.d.ts +4 -0
  94. package/lib/exceptions/IndexOutOfBoundsException.js +28 -0
  95. package/lib/exceptions/IsAlreadyExistsException.d.ts +4 -0
  96. package/lib/exceptions/IsAlreadyExistsException.js +28 -0
  97. package/lib/exceptions/IsEmptyException.d.ts +4 -0
  98. package/lib/exceptions/IsEmptyException.js +28 -0
  99. package/lib/exceptions/IsFullException.d.ts +4 -0
  100. package/lib/exceptions/IsFullException.js +28 -0
  101. package/lib/exceptions/IsNotFoundException.d.ts +4 -0
  102. package/lib/exceptions/IsNotFoundException.js +28 -0
  103. package/lib/exceptions/base/IllegalArgumentException.d.ts +3 -0
  104. package/lib/exceptions/base/IllegalArgumentException.js +27 -0
  105. package/lib/exceptions/base/IllegalStateException.d.ts +3 -0
  106. package/lib/exceptions/base/IllegalStateException.js +27 -0
  107. package/lib/exports/algorithms.d.ts +16 -0
  108. package/lib/exports/algorithms.js +36 -0
  109. package/lib/exports/constants.d.ts +2 -0
  110. package/lib/exports/constants.js +7 -0
  111. package/lib/exports/data-structures.d.ts +11 -0
  112. package/lib/exports/data-structures.js +24 -0
  113. package/lib/exports/helpers.d.ts +6 -0
  114. package/lib/exports/helpers.js +14 -0
  115. package/lib/exports/sorts.d.ts +6 -0
  116. package/lib/exports/sorts.js +14 -0
  117. package/lib/exports/utils.d.ts +3 -0
  118. package/lib/exports/utils.js +14 -0
  119. package/lib/exports.d.ts +52 -0
  120. package/lib/exports.js +103 -0
  121. package/lib/helpers/createBinaryTree.d.ts +6 -0
  122. package/lib/helpers/createBinaryTree.js +22 -0
  123. package/lib/helpers/createGraph.d.ts +6 -0
  124. package/lib/helpers/createGraph.js +24 -0
  125. package/lib/helpers/createGraphFromMatrix.d.ts +7 -0
  126. package/lib/helpers/createGraphFromMatrix.js +42 -0
  127. package/lib/helpers/createLinkedList.d.ts +3 -0
  128. package/lib/helpers/createLinkedList.js +21 -0
  129. package/lib/index.d.ts +3 -0
  130. package/lib/index.js +6 -0
  131. package/lib/types/ArrayMatrix.d.ts +1 -0
  132. package/lib/types/ArrayMatrix.js +3 -0
  133. package/lib/types/EnumBinarySearchTreeType.d.ts +4 -0
  134. package/lib/types/EnumBinarySearchTreeType.js +9 -0
  135. package/lib/types/EnumGraphType.d.ts +4 -0
  136. package/lib/types/EnumGraphType.js +9 -0
  137. package/lib/types/EnumLinkedListType.d.ts +4 -0
  138. package/lib/types/EnumLinkedListType.js +9 -0
  139. package/lib/types/EnumRandomGenerationFormat.d.ts +4 -0
  140. package/lib/types/EnumRandomGenerationFormat.js +9 -0
  141. package/lib/types/EnumTreeTraversalType.d.ts +5 -0
  142. package/lib/types/EnumTreeTraversalType.js +10 -0
  143. package/lib/types/FnCompareTwo.d.ts +1 -0
  144. package/lib/types/FnCompareTwo.js +3 -0
  145. package/lib/types/FnToMemoize.d.ts +1 -0
  146. package/lib/types/FnToMemoize.js +3 -0
  147. package/lib/types/IArrayFacade.d.ts +4 -0
  148. package/lib/types/IArrayFacade.js +3 -0
  149. package/lib/types/IBiDirectIterable.d.ts +5 -0
  150. package/lib/types/IBiDirectIterable.js +3 -0
  151. package/lib/types/IBiDirectIterator.d.ts +11 -0
  152. package/lib/types/IBiDirectIterator.js +3 -0
  153. package/lib/types/IBinaryTree.d.ts +12 -0
  154. package/lib/types/IBinaryTree.js +3 -0
  155. package/lib/types/IConvertableToArray.d.ts +4 -0
  156. package/lib/types/IConvertableToArray.js +3 -0
  157. package/lib/types/IGraph.d.ts +14 -0
  158. package/lib/types/IGraph.js +3 -0
  159. package/lib/types/IGraphIterationStrategy.d.ts +5 -0
  160. package/lib/types/IGraphIterationStrategy.js +3 -0
  161. package/lib/types/IGraphIterator.d.ts +11 -0
  162. package/lib/types/IGraphIterator.js +3 -0
  163. package/lib/types/IIterable.d.ts +4 -0
  164. package/lib/types/IIterable.js +3 -0
  165. package/lib/types/IIterator.d.ts +14 -0
  166. package/lib/types/IIterator.js +3 -0
  167. package/lib/types/IKeyValueStorage.d.ts +8 -0
  168. package/lib/types/IKeyValueStorage.js +3 -0
  169. package/lib/types/ILinearStorage.d.ts +11 -0
  170. package/lib/types/ILinearStorage.js +3 -0
  171. package/lib/types/ILinearStorageRA.d.ts +13 -0
  172. package/lib/types/ILinearStorageRA.js +3 -0
  173. package/lib/types/ILinkedList.d.ts +4 -0
  174. package/lib/types/ILinkedList.js +3 -0
  175. package/lib/utils.d.ts +33 -0
  176. package/lib/utils.js +108 -0
  177. package/package.json +1 -1
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5kaXJlY3RlZEdyYXBoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9VbmRpcmVjdGVkR3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQTRDO0FBQzVDLHlDQUFvQztBQUNwQyw0RUFBdUU7QUFFdkU7OztHQUdHO0FBQ0g7SUFBZ0QsbUNBQWdCO0lBQzlEOztPQUVHO0lBQ0g7ZUFDRSxpQkFBTztJQUNULENBQUM7SUFFRDs7T0FFRztJQUNPLHdDQUFjLEdBQXhCLFVBQXlCLElBQU8sRUFBRSxFQUFLO1FBQ3JDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMzQixVQUFDLElBQWtCO1lBQ2pCLE9BQUEsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQztnQkFDbEQsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQztRQURsRCxDQUNrRCxDQUNyRCxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE1BQU0sSUFBSSw2QkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQ0FBTyxHQUFkLFVBQWUsSUFBTyxFQUFFLEVBQUs7UUFDM0IsT0FBTyxPQUFPLENBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFJO1lBQ3BCLE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDO2dCQUNsRCxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxR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
@@ -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>;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateRandomGraph = void 0;
4
+ var EnumGraphType_1 = require("../../../types/EnumGraphType");
5
+ var createGraph_1 = require("../../../helpers/createGraph");
6
+ var utils_1 = require("../../../utils");
7
+ var EnumRandomGenerationFormat_1 = require("../../../types/EnumRandomGenerationFormat");
8
+ var getRandomVertex = function () {
9
+ return "_" + Math.random().toString(36).substr(2, 9);
10
+ };
11
+ var getPossibleEdgesCount = function (type, verticesCount) {
12
+ var possibleEdgesCount = verticesCount * (verticesCount - 1);
13
+ switch (type) {
14
+ case EnumGraphType_1.EnumGraphType.Directed: {
15
+ break;
16
+ }
17
+ case EnumGraphType_1.EnumGraphType.Undirected: {
18
+ possibleEdgesCount = Math.floor(possibleEdgesCount / 2);
19
+ break;
20
+ }
21
+ }
22
+ return possibleEdgesCount;
23
+ };
24
+ var fillGraphRandomly = function (graph, format, verticesCount) {
25
+ switch (format) {
26
+ case EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.Hash: {
27
+ for (var i = 0; i < verticesCount; i++) {
28
+ graph.addVertex(getRandomVertex());
29
+ }
30
+ break;
31
+ }
32
+ case EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.Numbers: {
33
+ for (var i = 0; i < verticesCount; i++) {
34
+ graph.addVertex((i + 1).toString());
35
+ }
36
+ break;
37
+ }
38
+ }
39
+ };
40
+ exports.generateRandomGraph = function (verticesCount, edgesCount, type, format) {
41
+ if (type === void 0) { type = EnumGraphType_1.EnumGraphType.Undirected; }
42
+ if (format === void 0) { format = EnumRandomGenerationFormat_1.EnumRandomGenerationFormat.Numbers; }
43
+ var graph = createGraph_1.createGraph(type);
44
+ var possibleEdgesCount = getPossibleEdgesCount(type, verticesCount);
45
+ if (edgesCount <= 0 || edgesCount > possibleEdgesCount) {
46
+ throw new Error("Edges count must be in range between 0 and " + possibleEdgesCount);
47
+ }
48
+ fillGraphRandomly(graph, format, verticesCount);
49
+ var addedVertices = graph.vertices();
50
+ var addedEdgesCount = 0;
51
+ while (addedEdgesCount < edgesCount) {
52
+ var randomizeIndex = function () {
53
+ return utils_1.randomizeNumberInRange(0, addedVertices.length);
54
+ };
55
+ var randomVertexFrom = addedVertices[randomizeIndex()];
56
+ var randomVertexTo = addedVertices[randomizeIndex()];
57
+ var isEdgeAlreadyExists = graph.hasEdge(randomVertexFrom, randomVertexTo);
58
+ var isTheSameVertex = randomVertexFrom === randomVertexTo;
59
+ if (!isTheSameVertex && !isEdgeAlreadyExists) {
60
+ graph.addEdge(randomVertexFrom, randomVertexTo);
61
+ addedEdgesCount++;
62
+ }
63
+ }
64
+ return graph;
65
+ };
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVSYW5kb21HcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvZGVtby9nZW5lcmF0ZVJhbmRvbUdyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDhEQUE2RDtBQUM3RCw0REFBMkQ7QUFDM0Qsd0NBQXdEO0FBQ3hELHdGQUF1RjtBQUV2RixJQUFNLGVBQWUsR0FBRztJQUN0QixPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDO0FBRUYsSUFBTSxxQkFBcUIsR0FBRyxVQUM1QixJQUFtQixFQUNuQixhQUFxQjtJQUVyQixJQUFJLGtCQUFrQixHQUFHLGFBQWEsR0FBRyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUU3RCxRQUFRLElBQUksRUFBRTtRQUNaLEtBQUssNkJBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQixNQUFNO1NBQ1A7UUFDRCxLQUFLLDZCQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0Isa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RCxNQUFNO1NBQ1A7S0FDRjtJQUVELE9BQU8sa0JBQWtCLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUYsSUFBTSxpQkFBaUIsR0FBRyxVQUN4QixLQUFxQixFQUNyQixNQUFrQyxFQUNsQyxhQUFxQjtJQUVyQixRQUFRLE1BQU0sRUFBRTtRQUNkLEtBQUssdURBQTBCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO2FBQ3BDO1lBQ0QsTUFBTTtTQUNQO1FBQ0QsS0FBSyx1REFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDckM7WUFDRCxNQUFNO1NBQ1A7S0FDRjtBQUNILENBQUMsQ0FBQztBQUVXLFFBQUEsbUJBQW1CLEdBQUcsVUFDakMsYUFBcUIsRUFDckIsVUFBa0IsRUFDbEIsSUFBOEMsRUFDOUMsTUFBdUU7SUFEdkUscUJBQUEsRUFBQSxPQUFzQiw2QkFBYSxDQUFDLFVBQVU7SUFDOUMsdUJBQUEsRUFBQSxTQUFxQyx1REFBMEIsQ0FBQyxPQUFPO0lBRXZFLElBQU0sS0FBSyxHQUFHLHlCQUFXLENBQVMsSUFBSSxDQUFDLENBQUM7SUFDeEMsSUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFdEUsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLFVBQVUsR0FBRyxrQkFBa0IsRUFBRTtRQUN0RCxNQUFNLElBQUksS0FBSyxDQUNiLGdEQUE4QyxrQkFBb0IsQ0FDbkUsQ0FBQztLQUNIO0lBRUQsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRCxJQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkMsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBRXhCLE9BQU8sZUFBZSxHQUFHLFVBQVUsRUFBRTtRQUNuQyxJQUFNLGNBQWMsR0FBRztZQUNyQixPQUFPLDhCQUFzQixDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDO1FBQ0YsSUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUV2RCxJQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDNUUsSUFBTSxlQUFlLEdBQUcsZ0JBQWdCLEtBQUssY0FBYyxDQUFDO1FBRTVELElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM1QyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ2hELGVBQWUsRUFBRSxDQUFDO1NBQ25CO0tBQ0Y7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyJ9
@@ -0,0 +1,35 @@
1
+ import IGraphIterator from "../../../types/IGraphIterator";
2
+ import IGraph from "../../../types/IGraph";
3
+ export default abstract class AbstractGraphIterator<T> implements IGraphIterator<T> {
4
+ protected readonly graph: IGraph<T>;
5
+ protected readonly visited: Map<T, boolean>;
6
+ protected readonly parents: Map<T, T>;
7
+ /**
8
+ * Creates empty instance
9
+ */
10
+ protected constructor(graph: IGraph<T>);
11
+ protected abstract currentImpl(): T;
12
+ protected abstract nextImpl(): T;
13
+ protected abstract initIteratorImpl(from: T): void;
14
+ protected abstract hasNextImpl(): boolean;
15
+ /**
16
+ * @inheritDoc
17
+ */
18
+ initIterator(from: T): void;
19
+ /**
20
+ * @inheritDoc
21
+ */
22
+ hasNext(): boolean;
23
+ /**
24
+ * @inheritDoc
25
+ */
26
+ next(): T;
27
+ /**
28
+ * @inheritDoc
29
+ */
30
+ current(): T;
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ getPath(from: T, to: T): Array<T>;
35
+ }
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __spreadArrays = (this && this.__spreadArrays) || function () {
3
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
4
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
5
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
6
+ r[k] = a[j];
7
+ return r;
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ var AbstractGraphIterator = /** @class */ (function () {
11
+ /**
12
+ * Creates empty instance
13
+ */
14
+ function AbstractGraphIterator(graph) {
15
+ this.graph = graph;
16
+ this.visited = new Map();
17
+ this.parents = new Map();
18
+ }
19
+ /**
20
+ * @inheritDoc
21
+ */
22
+ AbstractGraphIterator.prototype.initIterator = function (from) {
23
+ if (!this.graph.hasVertex(from)) {
24
+ throw new Error("Start vertex does not exist");
25
+ }
26
+ this.initIteratorImpl(from);
27
+ };
28
+ /**
29
+ * @inheritDoc
30
+ */
31
+ AbstractGraphIterator.prototype.hasNext = function () {
32
+ return this.hasNextImpl();
33
+ };
34
+ /**
35
+ * @inheritDoc
36
+ */
37
+ AbstractGraphIterator.prototype.next = function () {
38
+ try {
39
+ if (!this.hasNext()) {
40
+ throw new Error();
41
+ }
42
+ return this.nextImpl();
43
+ }
44
+ catch (e) {
45
+ throw new Error("Next element does not exist");
46
+ }
47
+ };
48
+ /**
49
+ * @inheritDoc
50
+ */
51
+ AbstractGraphIterator.prototype.current = function () {
52
+ try {
53
+ var current = this.currentImpl();
54
+ if (current === null) {
55
+ throw new Error();
56
+ }
57
+ return current;
58
+ }
59
+ catch (e) {
60
+ throw new Error("Current element does not exist");
61
+ }
62
+ };
63
+ /**
64
+ * @inheritDoc
65
+ */
66
+ AbstractGraphIterator.prototype.getPath = function (from, to) {
67
+ var path = new Array();
68
+ var isLinkedDirectly = this.graph.hasEdge(from, to);
69
+ var currentVertex = this.parents.get(to);
70
+ if (isLinkedDirectly) {
71
+ return [from, to];
72
+ }
73
+ else {
74
+ while (currentVertex) {
75
+ if (currentVertex === from) {
76
+ break;
77
+ }
78
+ path.push(currentVertex);
79
+ currentVertex = this.parents.get(currentVertex);
80
+ }
81
+ if (path.length === 0) {
82
+ throw new Error("There is no path found");
83
+ }
84
+ return __spreadArrays([from], path.reverse(), [to]);
85
+ }
86
+ };
87
+ return AbstractGraphIterator;
88
+ }());
89
+ exports.default = AbstractGraphIterator;
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RHcmFwaEl0ZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9pdGVyYXRvci9BYnN0cmFjdEdyYXBoSXRlcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0E7SUFNRTs7T0FFRztJQUNILCtCQUFzQixLQUFnQjtRQUNwQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFPRDs7T0FFRztJQUNJLDRDQUFZLEdBQW5CLFVBQW9CLElBQU87UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSSx1Q0FBTyxHQUFkO1FBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0NBQUksR0FBWDtRQUNFLElBQUk7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNuQixNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7YUFDbkI7WUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUN4QjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksdUNBQU8sR0FBZDtRQUNFLElBQUk7WUFDRixJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFbkMsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO2dCQUNwQixNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7YUFDbkI7WUFDRCxPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksdUNBQU8sR0FBZCxVQUFlLElBQU8sRUFBRSxFQUFLO1FBQzNCLElBQU0sSUFBSSxHQUFhLElBQUksS0FBSyxFQUFLLENBQUM7UUFDdEMsSUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFekMsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ25CO2FBQU07WUFDTCxPQUFPLGFBQWEsRUFBRTtnQkFDcEIsSUFBSSxhQUFhLEtBQUssSUFBSSxFQUFFO29CQUMxQixNQUFNO2lCQUNQO2dCQUVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3pCLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNqRDtZQUVELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQzthQUMzQztZQUVELHVCQUFRLElBQUksR0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUUsRUFBRSxHQUFFO1NBQ3RDO0lBQ0gsQ0FBQztJQUNILDRCQUFDO0FBQUQsQ0FBQyxBQS9GRCxJQStGQyJ9
@@ -0,0 +1,28 @@
1
+ import IGraph from "../../../types/IGraph";
2
+ import AbstractGraphIterator from "./AbstractGraphIterator";
3
+ /**
4
+ * Breadth first graph traversal
5
+ */
6
+ export default class GraphIteratorBFS<T> extends AbstractGraphIterator<T> {
7
+ private readonly queue;
8
+ /**
9
+ * @inheritDoc
10
+ */
11
+ constructor(graph: IGraph<T>);
12
+ /**
13
+ * @inheritDoc
14
+ */
15
+ protected currentImpl(): T;
16
+ /**
17
+ @inheritDoc
18
+ */
19
+ initIteratorImpl(startVertex: T): void;
20
+ /**
21
+ * @inheritDoc
22
+ */
23
+ hasNextImpl(): boolean;
24
+ /**
25
+ * @inheritDoc
26
+ */
27
+ protected nextImpl(): T;
28
+ }
@@ -0,0 +1,70 @@
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 Queue_1 = require("../../Queue/Queue");
17
+ var AbstractGraphIterator_1 = require("./AbstractGraphIterator");
18
+ /**
19
+ * Breadth first graph traversal
20
+ */
21
+ var GraphIteratorBFS = /** @class */ (function (_super) {
22
+ __extends(GraphIteratorBFS, _super);
23
+ /**
24
+ * @inheritDoc
25
+ */
26
+ function GraphIteratorBFS(graph) {
27
+ var _this = _super.call(this, graph) || this;
28
+ _this.queue = new Queue_1.default();
29
+ return _this;
30
+ }
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ GraphIteratorBFS.prototype.currentImpl = function () {
35
+ return this.queue.peek();
36
+ };
37
+ /**
38
+ @inheritDoc
39
+ */
40
+ GraphIteratorBFS.prototype.initIteratorImpl = function (startVertex) {
41
+ this.queue.push(startVertex);
42
+ this.visited.set(startVertex, true);
43
+ };
44
+ /**
45
+ * @inheritDoc
46
+ */
47
+ GraphIteratorBFS.prototype.hasNextImpl = function () {
48
+ return !this.queue.isEmpty();
49
+ };
50
+ /**
51
+ * @inheritDoc
52
+ */
53
+ GraphIteratorBFS.prototype.nextImpl = function () {
54
+ var _this = this;
55
+ var next = this.queue.pop();
56
+ var nextNeighbors = this.graph.getVertexNeighbors(next);
57
+ nextNeighbors.forEach(function (neighbor) {
58
+ var isNotVisited = !_this.visited.get(neighbor);
59
+ if (isNotVisited) {
60
+ _this.queue.push(neighbor);
61
+ _this.visited.set(neighbor, true);
62
+ _this.parents.set(neighbor, next);
63
+ }
64
+ });
65
+ return next;
66
+ };
67
+ return GraphIteratorBFS;
68
+ }(AbstractGraphIterator_1.default));
69
+ exports.default = GraphIteratorBFS;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhJdGVyYXRvckJGUy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvaXRlcmF0b3IvR3JhcGhJdGVyYXRvckJGUy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBc0M7QUFFdEMsaUVBQTREO0FBRTVEOztHQUVHO0FBQ0g7SUFBaUQsb0NBQXdCO0lBR3ZFOztPQUVHO0lBQ0gsMEJBQW1CLEtBQWdCO1FBQW5DLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBRWI7UUFEQyxLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBSyxFQUFFLENBQUM7O0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNPLHNDQUFXLEdBQXJCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLDJDQUFnQixHQUF2QixVQUF3QixXQUFjO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxzQ0FBVyxHQUFsQjtRQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNPLG1DQUFRLEdBQWxCO1FBQUEsaUJBZUM7UUFkQyxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFDLFFBQVE7WUFDN0IsSUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVqRCxJQUFJLFlBQVksRUFBRTtnQkFDaEIsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFCLEtBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakMsS0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2xDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDSCx1QkFBQztBQUFELENBQUMsQUFwREQsQ0FBaUQsK0JBQXFCLEdBb0RyRSJ9
@@ -0,0 +1,28 @@
1
+ import IGraph from "../../../types/IGraph";
2
+ import AbstractGraphIterator from "./AbstractGraphIterator";
3
+ /**
4
+ * Deep first graph traversal
5
+ */
6
+ export default class GraphIteratorDFS<T> extends AbstractGraphIterator<T> {
7
+ private readonly stack;
8
+ /**
9
+ * @inheritDoc
10
+ */
11
+ constructor(graph: IGraph<T>);
12
+ /**
13
+ * @inheritDoc
14
+ */
15
+ hasNextImpl(): boolean;
16
+ /**
17
+ @inheritDoc
18
+ */
19
+ initIteratorImpl(startVertex: T): void;
20
+ /**
21
+ * @inheritDoc
22
+ */
23
+ currentImpl(): T;
24
+ /**
25
+ * @inheritDoc
26
+ */
27
+ nextImpl(): T;
28
+ }
@@ -0,0 +1,70 @@
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 Stack_1 = require("../../Stack/Stack");
17
+ var AbstractGraphIterator_1 = require("./AbstractGraphIterator");
18
+ /**
19
+ * Deep first graph traversal
20
+ */
21
+ var GraphIteratorDFS = /** @class */ (function (_super) {
22
+ __extends(GraphIteratorDFS, _super);
23
+ /**
24
+ * @inheritDoc
25
+ */
26
+ function GraphIteratorDFS(graph) {
27
+ var _this = _super.call(this, graph) || this;
28
+ _this.stack = new Stack_1.default();
29
+ return _this;
30
+ }
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ GraphIteratorDFS.prototype.hasNextImpl = function () {
35
+ return !this.stack.isEmpty();
36
+ };
37
+ /**
38
+ @inheritDoc
39
+ */
40
+ GraphIteratorDFS.prototype.initIteratorImpl = function (startVertex) {
41
+ this.stack.push(startVertex);
42
+ this.visited.set(startVertex, true);
43
+ };
44
+ /**
45
+ * @inheritDoc
46
+ */
47
+ GraphIteratorDFS.prototype.currentImpl = function () {
48
+ return this.stack.peek();
49
+ };
50
+ /**
51
+ * @inheritDoc
52
+ */
53
+ GraphIteratorDFS.prototype.nextImpl = function () {
54
+ var _this = this;
55
+ var next = this.stack.pop();
56
+ var nextNeighbors = this.graph.getVertexNeighbors(next);
57
+ nextNeighbors.forEach(function (neighbor) {
58
+ var isNotVisited = !_this.visited.get(neighbor);
59
+ if (isNotVisited) {
60
+ _this.stack.push(neighbor);
61
+ _this.visited.set(neighbor, true);
62
+ _this.parents.set(neighbor, next);
63
+ }
64
+ });
65
+ return next;
66
+ };
67
+ return GraphIteratorDFS;
68
+ }(AbstractGraphIterator_1.default));
69
+ exports.default = GraphIteratorDFS;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhJdGVyYXRvckRGUy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvaXRlcmF0b3IvR3JhcGhJdGVyYXRvckRGUy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBc0M7QUFFdEMsaUVBQTREO0FBRTVEOztHQUVHO0FBQ0g7SUFBaUQsb0NBQXdCO0lBR3ZFOztPQUVHO0lBQ0gsMEJBQW1CLEtBQWdCO1FBQW5DLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBRWI7UUFEQyxLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBSyxFQUFFLENBQUM7O0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLHNDQUFXLEdBQWxCO1FBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksMkNBQWdCLEdBQXZCLFVBQXdCLFdBQWM7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLHNDQUFXLEdBQWxCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLG1DQUFRLEdBQWY7UUFBQSxpQkFlQztRQWRDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxRCxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUMsUUFBUTtZQUM3QixJQUFNLFlBQVksR0FBRyxDQUFDLEtBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRWpELElBQUksWUFBWSxFQUFFO2dCQUNoQixLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsS0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxLQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNILHVCQUFDO0FBQUQsQ0FBQyxBQXBERCxDQUFpRCwrQkFBcUIsR0FvRHJFIn0=
@@ -0,0 +1,32 @@
1
+ import IGraph from "../../../types/IGraph";
2
+ import AbstractGraphIterator from "./AbstractGraphIterator";
3
+ /**
4
+ * Dijkstra method graph traversal
5
+ */
6
+ export default class GraphIteratorDijkstra<T> extends AbstractGraphIterator<T> {
7
+ private readonly costs;
8
+ /**
9
+ * @inheritDoc
10
+ */
11
+ constructor(graph: IGraph<T>);
12
+ /**
13
+ * Get not visited vertex with minimal cost
14
+ */
15
+ private getClosestNotVisited;
16
+ /**
17
+ * @inheritDoc
18
+ */
19
+ initIteratorImpl(startVertex: T): void;
20
+ /**
21
+ * @inheritDoc
22
+ */
23
+ hasNextImpl(): boolean;
24
+ /**
25
+ * @inheritDoc
26
+ */
27
+ currentImpl(): T;
28
+ /**
29
+ * @inheritDoc
30
+ */
31
+ nextImpl(): T;
32
+ }
@@ -0,0 +1,99 @@
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 AbstractGraphIterator_1 = require("./AbstractGraphIterator");
17
+ /**
18
+ * Dijkstra method graph traversal
19
+ */
20
+ var GraphIteratorDijkstra = /** @class */ (function (_super) {
21
+ __extends(GraphIteratorDijkstra, _super);
22
+ /**
23
+ * @inheritDoc
24
+ */
25
+ function GraphIteratorDijkstra(graph) {
26
+ var _this = _super.call(this, graph) || this;
27
+ _this.costs = new Map();
28
+ return _this;
29
+ }
30
+ /**
31
+ * Get not visited vertex with minimal cost
32
+ */
33
+ GraphIteratorDijkstra.prototype.getClosestNotVisited = function () {
34
+ var _this = this;
35
+ var keys = Array.from(this.costs.keys());
36
+ var priorityList = keys
37
+ .filter(function (key) { return !_this.visited.get(key); })
38
+ .sort(function (aKey, bKey) {
39
+ var aCost = _this.costs.get(aKey) || 0;
40
+ var bCost = _this.costs.get(bKey) || 0;
41
+ return aCost - bCost;
42
+ });
43
+ if (priorityList[0] === undefined) {
44
+ throw new Error("No more vertices found");
45
+ }
46
+ return priorityList[0];
47
+ };
48
+ /**
49
+ * @inheritDoc
50
+ */
51
+ GraphIteratorDijkstra.prototype.initIteratorImpl = function (startVertex) {
52
+ var _this = this;
53
+ if (!this.graph.hasVertex(startVertex)) {
54
+ throw new Error("Start vertex does not exist");
55
+ }
56
+ this.visited.set(startVertex, true);
57
+ this.costs.set(startVertex, 0);
58
+ this.graph.getVertexNeighbors(startVertex).forEach(function (neighbor) {
59
+ var edgeWeight = _this.graph.getEdgeWeight(startVertex, neighbor);
60
+ _this.costs.set(neighbor, edgeWeight);
61
+ _this.parents.set(neighbor, startVertex);
62
+ });
63
+ };
64
+ /**
65
+ * @inheritDoc
66
+ */
67
+ GraphIteratorDijkstra.prototype.hasNextImpl = function () {
68
+ return !(this.getClosestNotVisited() === null);
69
+ };
70
+ /**
71
+ * @inheritDoc
72
+ */
73
+ GraphIteratorDijkstra.prototype.currentImpl = function () {
74
+ return this.getClosestNotVisited();
75
+ };
76
+ /**
77
+ * @inheritDoc
78
+ */
79
+ GraphIteratorDijkstra.prototype.nextImpl = function () {
80
+ var _this = this;
81
+ var next = this.getClosestNotVisited();
82
+ this.visited.set(next, true);
83
+ var nextNeighbors = this.graph.getVertexNeighbors(next);
84
+ var nextCost = this.costs.get(next);
85
+ nextNeighbors.forEach(function (neighbor) {
86
+ var edgeWeight = _this.graph.getEdgeWeight(next, neighbor);
87
+ var currentNeighborCost = _this.costs.get(neighbor) || Infinity;
88
+ var newNeighborCost = (nextCost || 0) + edgeWeight;
89
+ if (newNeighborCost < currentNeighborCost) {
90
+ _this.costs.set(neighbor, newNeighborCost);
91
+ _this.parents.set(neighbor, next);
92
+ }
93
+ });
94
+ return next;
95
+ };
96
+ return GraphIteratorDijkstra;
97
+ }(AbstractGraphIterator_1.default));
98
+ exports.default = GraphIteratorDijkstra;
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhJdGVyYXRvckRpamtzdHJhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9pdGVyYXRvci9HcmFwaEl0ZXJhdG9yRGlqa3N0cmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsaUVBQTREO0FBRTVEOztHQUVHO0FBQ0g7SUFBc0QseUNBQXdCO0lBRzVFOztPQUVHO0lBQ0gsK0JBQW1CLEtBQWdCO1FBQW5DLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBRWI7UUFEQyxLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7O0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNLLG9EQUFvQixHQUE1QjtRQUFBLGlCQWdCQztRQWZDLElBQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLElBQU0sWUFBWSxHQUFHLElBQUk7YUFDdEIsTUFBTSxDQUFDLFVBQUMsR0FBTSxJQUFLLE9BQUEsQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBdEIsQ0FBc0IsQ0FBQzthQUMxQyxJQUFJLENBQUMsVUFBQyxJQUFPLEVBQUUsSUFBTztZQUNyQixJQUFNLEtBQUssR0FBRyxLQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBTSxLQUFLLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXhDLE9BQU8sS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDM0M7UUFFRCxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxnREFBZ0IsR0FBdkIsVUFBd0IsV0FBYztRQUF0QyxpQkFhQztRQVpDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7U0FDaEQ7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsUUFBVztZQUM3RCxJQUFNLFVBQVUsR0FBRyxLQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbkUsS0FBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3JDLEtBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLDJDQUFXLEdBQWxCO1FBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksMkNBQVcsR0FBbEI7UUFDRSxPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLHdDQUFRLEdBQWY7UUFBQSxpQkFtQkM7UUFsQkMsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFDLFFBQVc7WUFDaEMsSUFBTSxVQUFVLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzVELElBQU0sbUJBQW1CLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDO1lBQ2pFLElBQU0sZUFBZSxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUVyRCxJQUFJLGVBQWUsR0FBRyxtQkFBbUIsRUFBRTtnQkFDekMsS0FBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUMxQyxLQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNILDRCQUFDO0FBQUQsQ0FBQyxBQXZGRCxDQUFzRCwrQkFBcUIsR0F1RjFFIn0=