From dd0cf9b19fc6f8135335f3c92a9c46dbfee9ab52 Mon Sep 17 00:00:00 2001 From: Monalisa0311 Date: Tue, 10 Sep 2024 01:25:48 +0530 Subject: [PATCH 1/8] Added test cases in greedy_algorithms\kruskals_minimum_spanning_tree.cpp --- .../kruskals_minimum_spanning_tree.cpp | 183 ++++++++++++++++-- 1 file changed, 168 insertions(+), 15 deletions(-) diff --git a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp index 7925eb0373e..c10bb22818c 100644 --- a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp +++ b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp @@ -20,6 +20,7 @@ #include /// for array #include /// for IO operations +#include /// for numeric limits /** * @namespace @@ -32,14 +33,19 @@ namespace greedy_algorithms { * @param graph The graph that will be used to find the edge * @returns void */ -template -void findMinimumEdge(const int &infinity, - const std::array, 6> &graph) { +template +void findMinimumEdge(const T &infinity, + const std::array, M> &graph) { + if (N != M) { + std::cout << "\nWrong input passed. Provided array has dimensions " << N + << "x" << M << ". Please provide a square matrix.\n"; + return; + } for (int i = 0; i < graph.size(); i++) { int min = infinity; int minIndex = 0; for (int j = 0; j < graph.size(); j++) { - if (graph[i][j] != 0 && graph[i][j] < min) { + if (i != j && graph[i][j] != 0 && graph[i][j] < min) { min = graph[i][j]; minIndex = j; } @@ -50,20 +56,167 @@ void findMinimumEdge(const int &infinity, } } // namespace greedy_algorithms +/** + * define a large constant value for int + * define a large constant value for float + * define a large constant value for double + */ +constexpr int INFINITY_INT = std::numeric_limits::max(); +constexpr float INFINITY_FLOAT = std::numeric_limits::max(); +constexpr double INFINITY_DOUBLE = std::numeric_limits::max(); + +/** + * @brief Self-test implementations + * @returns void + */ +static void test() { + // Test case with interger values + std::cout << "\nTest Case 1 :\n"; + std::array, 6> graph1{0, + 4, + 1, + 4, + INFINITY_INT, + INFINITY_INT, + 4, + 0, + 3, + 8, + 3, + INFINITY_INT, + 1, + 3, + 0, + INFINITY_INT, + 1, + INFINITY_INT, + 4, + 8, + INFINITY_INT, + 0, + 5, + 7, + INFINITY_INT, + 3, + 1, + 5, + 0, + INFINITY_INT, + INFINITY_INT, + INFINITY_INT, + INFINITY_INT, + 7, + INFINITY_INT, + 0}; + greedy_algorithms::findMinimumEdge(INFINITY_INT, graph1); + + // Test case with floating values + std::cout << "\nTest Case 2 :\n"; + std::array, 3> graph2{0.0f, 2.5f, INFINITY_FLOAT, 2.5f, + 0.0f, 3.2f, INFINITY_FLOAT, 3.2f, + 0.0f}; + greedy_algorithms::findMinimumEdge(INFINITY_FLOAT, graph2); + + // Test case with double values + std::cout << "\nTest Case 3 :\n"; + std::array, 5> graph3{0.0, + 10.5, + INFINITY_DOUBLE, + 6.7, + 3.3, + 10.5, + 0.0, + 8.1, + 15.4, + INFINITY_DOUBLE, + INFINITY_DOUBLE, + 8.1, + 0.0, + INFINITY_DOUBLE, + 7.8, + 6.7, + 15.4, + INFINITY_DOUBLE, + 0.0, + 9.9, + 3.3, + INFINITY_DOUBLE, + 7.8, + 9.9, + 0.0}; + greedy_algorithms::findMinimumEdge(INFINITY_DOUBLE, graph3); + + // Test Case with negative weights + std::cout << "\nTest Case 4 :\n"; + std::array, 3> graph_neg{0, -2, 4, -2, 0, 3, 4, 3, 0}; + greedy_algorithms::findMinimumEdge(INFINITY_INT, graph_neg); + + // Test Case with Self-Loops + std::cout << "\nTest Case 5 :\n"; + std::array, 3> graph_self_loop{ + 2, 1, INFINITY_INT, INFINITY_INT, 0, 4, INFINITY_INT, 4, 0}; + greedy_algorithms::findMinimumEdge(INFINITY_INT, graph_self_loop); + + // Test Case with no edges + std::cout << "\nTest Case 6 :\n"; + std::array, 4> no_edges{ + 0, INFINITY_INT, INFINITY_INT, INFINITY_INT, INFINITY_INT, + 0, INFINITY_INT, INFINITY_INT, INFINITY_INT, INFINITY_INT, + 0, INFINITY_INT, INFINITY_INT, INFINITY_INT, INFINITY_INT, + 0}; + greedy_algorithms::findMinimumEdge(INFINITY_INT, no_edges); + + // Test Case with a non-connected graph + std::cout << "\nTest Case 7:\n"; + std::array, 4> partial_graph{ + 0, 2, INFINITY_INT, 6, 2, 0, 3, INFINITY_INT, INFINITY_INT, 3, 0, + 4, 6, INFINITY_INT, 4, 0}; + greedy_algorithms::findMinimumEdge(INFINITY_INT, partial_graph); + + // Test Case with Directed weighted graph. Krushkal algorithm does not give + // optimal answer + std::cout << "\nTest Case 8:\n"; + std::array, 4> directed_graph{ + 0, + 3, + 7, + INFINITY_INT, // Vertex 0 has edges to Vertex 1 and Vertex 2 + INFINITY_INT, + 0, + 2, + 5, // Vertex 1 has edges to Vertex 2 and Vertex 3 + INFINITY_INT, + INFINITY_INT, + 0, + 1, // Vertex 2 has an edge to Vertex 3 + INFINITY_INT, + INFINITY_INT, + INFINITY_INT, + 0}; // Vertex 3 has no outgoing edges + greedy_algorithms::findMinimumEdge(INFINITY_INT, directed_graph); + + // Test case with wrong input passed + std::cout << "\nTest Case 9:\n"; + std::array, 3> graph9{0, 5, 5, 5, 5, 0, + 5, 5, 5, 5, 5, 5}; + greedy_algorithms::findMinimumEdge(INFINITY_INT, graph9); + + // Test case with all same values between every edges + std::cout << "\nTest Case 10:\n"; + std::array, 5> graph10{0, 5, 5, 5, 5, 5, 0, 5, 5, + 5, 5, 5, 0, 5, 5, 5, 5, 5, + 0, 5, 5, 5, 5, 5, 0}; + greedy_algorithms::findMinimumEdge(INFINITY_INT, graph10); + + std::cout << "\nAll tests have successfully passed!\n"; +} + /** * @brief Main function * @returns 0 on exit */ + int main() { - constexpr int INFINITY = 99999; - std::array, 6> graph{ - 0, 4, 1, 4, INFINITY, INFINITY, - 4, 0, 3, 8, 3, INFINITY, - 1, 3, 0, INFINITY, 1, INFINITY, - 4, 8, INFINITY, 0, 5, 7, - INFINITY, 3, 1, 5, 0, INFINITY, - INFINITY, INFINITY, INFINITY, 7, INFINITY, 0}; - - greedy_algorithms::findMinimumEdge(INFINITY, graph); + test(); // run Self-test implementation return 0; -} +} \ No newline at end of file From d9196d3fff0ffe1dfb9a116a38ce45f1e1457051 Mon Sep 17 00:00:00 2001 From: Monalisa0311 <100229305+Monalisa0311@users.noreply.github.com> Date: Wed, 11 Sep 2024 09:42:34 +0530 Subject: [PATCH 2/8] Update kruskals_minimum_spanning_tree.cpp test case1 & 2 changed --- .../kruskals_minimum_spanning_tree.cpp | 52 +++++-------------- 1 file changed, 12 insertions(+), 40 deletions(-) diff --git a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp index c10bb22818c..a9e22cb8675 100644 --- a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp +++ b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp @@ -72,49 +72,21 @@ constexpr double INFINITY_DOUBLE = std::numeric_limits::max(); static void test() { // Test case with interger values std::cout << "\nTest Case 1 :\n"; - std::array, 6> graph1{0, - 4, - 1, - 4, - INFINITY_INT, - INFINITY_INT, - 4, - 0, - 3, - 8, - 3, - INFINITY_INT, - 1, - 3, - 0, - INFINITY_INT, - 1, - INFINITY_INT, - 4, - 8, - INFINITY_INT, - 0, - 5, - 7, - INFINITY_INT, - 3, - 1, - 5, - 0, - INFINITY_INT, - INFINITY_INT, - INFINITY_INT, - INFINITY_INT, - 7, - INFINITY_INT, - 0}; + std::array, 6> graph1{ + 0, 4, 1, 4, INFINITY_INT, INFINITY_INT, + 4, 0, 3, 8, 3, INFINITY_INT, + 1, 3, 0, INFINITY_INT, 1, INFINITY_INT, + 4, 8, INFINITY_INT, 0, 5, 7, + INFINITY_INT, 3, 1, 5, 0, INFINITY_INT, + INFINITY_INT, INFINITY_INT, INFINITY_INT, 7, INFINITY_INT, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, graph1); // Test case with floating values std::cout << "\nTest Case 2 :\n"; - std::array, 3> graph2{0.0f, 2.5f, INFINITY_FLOAT, 2.5f, - 0.0f, 3.2f, INFINITY_FLOAT, 3.2f, - 0.0f}; + std::array, 3> graph2{ + 0.0f, 2.5f, INFINITY_FLOAT, + 2.5f, 0.0f, 3.2f, + INFINITY_FLOAT, 3.2f, 0.0f}; greedy_algorithms::findMinimumEdge(INFINITY_FLOAT, graph2); // Test case with double values @@ -219,4 +191,4 @@ static void test() { int main() { test(); // run Self-test implementation return 0; -} \ No newline at end of file +} From 5ed46177b1bfb55fd344a141d2d28bd7cfcdbd42 Mon Sep 17 00:00:00 2001 From: Monalisa0311 <100229305+Monalisa0311@users.noreply.github.com> Date: Wed, 11 Sep 2024 10:17:42 +0530 Subject: [PATCH 3/8] Update kruskals_minimum_spanning_tree.cpp test-case1 changed --- .../kruskals_minimum_spanning_tree.cpp | 43 ++++++------------- 1 file changed, 12 insertions(+), 31 deletions(-) diff --git a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp index a9e22cb8675..8cca72a9195 100644 --- a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp +++ b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp @@ -73,12 +73,12 @@ static void test() { // Test case with interger values std::cout << "\nTest Case 1 :\n"; std::array, 6> graph1{ - 0, 4, 1, 4, INFINITY_INT, INFINITY_INT, - 4, 0, 3, 8, 3, INFINITY_INT, - 1, 3, 0, INFINITY_INT, 1, INFINITY_INT, - 4, 8, INFINITY_INT, 0, 5, 7, - INFINITY_INT, 3, 1, 5, 0, INFINITY_INT, - INFINITY_INT, INFINITY_INT, INFINITY_INT, 7, INFINITY_INT, 0}; + 0, 4, 1, 4, INFINITY_INT, INFINITY_INT, + 4, 0, 3, 8, 3, INFINITY_INT, + 1, 3, 0, INFINITY_INT, 1, INFINITY_INT, + 4, 8, INFINITY_INT, 0, 5, 7, + INFINITY_INT, 3, 1, 5, 0, INFINITY_INT, + INFINITY_INT, INFINITY_INT, INFINITY_INT, 7, INFINITY_INT, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, graph1); // Test case with floating values @@ -91,31 +91,12 @@ static void test() { // Test case with double values std::cout << "\nTest Case 3 :\n"; - std::array, 5> graph3{0.0, - 10.5, - INFINITY_DOUBLE, - 6.7, - 3.3, - 10.5, - 0.0, - 8.1, - 15.4, - INFINITY_DOUBLE, - INFINITY_DOUBLE, - 8.1, - 0.0, - INFINITY_DOUBLE, - 7.8, - 6.7, - 15.4, - INFINITY_DOUBLE, - 0.0, - 9.9, - 3.3, - INFINITY_DOUBLE, - 7.8, - 9.9, - 0.0}; + std::array, 5> graph3{ + 0.0, 10.5, INFINITY_DOUBLE, 6.7, 3.3, + 10.5, 0.0, 8.1, 15.4, INFINITY_DOUBLE, + INFINITY_DOUBLE, 8.1, 0.0, INFINITY_DOUBLE, 7.8, + 6.7, 15.4, INFINITY_DOUBLE, 0.0, 9.9, + 3.3, INFINITY_DOUBLE, 7.8, 9.9, 0.0}; greedy_algorithms::findMinimumEdge(INFINITY_DOUBLE, graph3); // Test Case with negative weights From 5b88f0eb9b727e797befc100e95ca9a3926b9b56 Mon Sep 17 00:00:00 2001 From: Monalisa0311 <100229305+Monalisa0311@users.noreply.github.com> Date: Wed, 11 Sep 2024 10:23:02 +0530 Subject: [PATCH 4/8] Update kruskals_minimum_spanning_tree.cpp All test case formatting changes --- .../kruskals_minimum_spanning_tree.cpp | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp index 8cca72a9195..3cc0629275e 100644 --- a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp +++ b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp @@ -84,8 +84,8 @@ static void test() { // Test case with floating values std::cout << "\nTest Case 2 :\n"; std::array, 3> graph2{ - 0.0f, 2.5f, INFINITY_FLOAT, - 2.5f, 0.0f, 3.2f, + 0.0f, 2.5f, INFINITY_FLOAT, + 2.5f, 0.0f, 3.2f, INFINITY_FLOAT, 3.2f, 0.0f}; greedy_algorithms::findMinimumEdge(INFINITY_FLOAT, graph2); @@ -101,64 +101,64 @@ static void test() { // Test Case with negative weights std::cout << "\nTest Case 4 :\n"; - std::array, 3> graph_neg{0, -2, 4, -2, 0, 3, 4, 3, 0}; + std::array, 3> graph_neg{ + 0, -2, 4, + -2, 0, 3, + 4, 3, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, graph_neg); // Test Case with Self-Loops std::cout << "\nTest Case 5 :\n"; std::array, 3> graph_self_loop{ - 2, 1, INFINITY_INT, INFINITY_INT, 0, 4, INFINITY_INT, 4, 0}; + 2, 1, INFINITY_INT, + INFINITY_INT, 0, 4, + INFINITY_INT, 4, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, graph_self_loop); // Test Case with no edges std::cout << "\nTest Case 6 :\n"; std::array, 4> no_edges{ - 0, INFINITY_INT, INFINITY_INT, INFINITY_INT, INFINITY_INT, - 0, INFINITY_INT, INFINITY_INT, INFINITY_INT, INFINITY_INT, - 0, INFINITY_INT, INFINITY_INT, INFINITY_INT, INFINITY_INT, - 0}; + 0, INFINITY_INT, INFINITY_INT, INFINITY_INT, + INFINITY_INT, 0, INFINITY_INT, INFINITY_INT, + INFINITY_INT, INFINITY_INT, 0, INFINITY_INT, + INFINITY_INT, INFINITY_INT, INFINITY_INT, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, no_edges); // Test Case with a non-connected graph std::cout << "\nTest Case 7:\n"; std::array, 4> partial_graph{ - 0, 2, INFINITY_INT, 6, 2, 0, 3, INFINITY_INT, INFINITY_INT, 3, 0, - 4, 6, INFINITY_INT, 4, 0}; + 0, 2, INFINITY_INT, 6, + 2, 0, 3, INFINITY_INT, + INFINITY_INT, 3, 0, 4, + 6, INFINITY_INT, 4, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, partial_graph); // Test Case with Directed weighted graph. Krushkal algorithm does not give // optimal answer std::cout << "\nTest Case 8:\n"; std::array, 4> directed_graph{ - 0, - 3, - 7, - INFINITY_INT, // Vertex 0 has edges to Vertex 1 and Vertex 2 - INFINITY_INT, - 0, - 2, - 5, // Vertex 1 has edges to Vertex 2 and Vertex 3 - INFINITY_INT, - INFINITY_INT, - 0, - 1, // Vertex 2 has an edge to Vertex 3 - INFINITY_INT, - INFINITY_INT, - INFINITY_INT, - 0}; // Vertex 3 has no outgoing edges + 0, 3, 7, INFINITY_INT, // Vertex 0 has edges to Vertex 1 and Vertex 2 + INFINITY_INT, 0, 2, 5, // Vertex 1 has edges to Vertex 2 and Vertex 3 + INFINITY_INT, INFINITY_INT, 0, 1, // Vertex 2 has an edge to Vertex 3 + INFINITY_INT, INFINITY_INT, INFINITY_INT, 0}; // Vertex 3 has no outgoing edges greedy_algorithms::findMinimumEdge(INFINITY_INT, directed_graph); // Test case with wrong input passed std::cout << "\nTest Case 9:\n"; - std::array, 3> graph9{0, 5, 5, 5, 5, 0, - 5, 5, 5, 5, 5, 5}; + std::array, 3> graph9{ + 0, 5, 5, 5, + 5, 0, 5, 5, + 5, 5, 5, 5}; greedy_algorithms::findMinimumEdge(INFINITY_INT, graph9); // Test case with all same values between every edges std::cout << "\nTest Case 10:\n"; - std::array, 5> graph10{0, 5, 5, 5, 5, 5, 0, 5, 5, - 5, 5, 5, 0, 5, 5, 5, 5, 5, - 0, 5, 5, 5, 5, 5, 0}; + std::array, 5> graph10{ + 0, 5, 5, 5, 5, + 5, 0, 5, 5, 5, + 5, 5, 0, 5, 5, + 5, 5, 5, 0, 5, + 5, 5, 5, 5, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, graph10); std::cout << "\nAll tests have successfully passed!\n"; From c4eb2792ce3c85a81b935425026fa27a924692f9 Mon Sep 17 00:00:00 2001 From: Monalisa0311 <100229305+Monalisa0311@users.noreply.github.com> Date: Wed, 11 Sep 2024 10:41:08 +0530 Subject: [PATCH 5/8] Update kruskals_minimum_spanning_tree.cpp unit-32 test case added --- greedy_algorithms/kruskals_minimum_spanning_tree.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp index 3cc0629275e..54f3dbfd6e7 100644 --- a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp +++ b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp @@ -21,6 +21,7 @@ #include /// for array #include /// for IO operations #include /// for numeric limits +#include /// for uint32_t /** * @namespace @@ -60,10 +61,12 @@ void findMinimumEdge(const T &infinity, * define a large constant value for int * define a large constant value for float * define a large constant value for double + * define infinity for uint32_t */ constexpr int INFINITY_INT = std::numeric_limits::max(); constexpr float INFINITY_FLOAT = std::numeric_limits::max(); constexpr double INFINITY_DOUBLE = std::numeric_limits::max(); +constexpr uint32_t INFINITY_UINT32 = UINT32_MAX; /** * @brief Self-test implementations @@ -161,6 +164,15 @@ static void test() { 5, 5, 5, 5, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, graph10); + // Test Case with uint32_t values + std::cout << "\nTest Case 11 :\n"; + std::array, 4> graph_uint32{ + 0, 5, INFINITY_UINT32, 9, + 5, 0, 2, INFINITY_UINT32, + INFINITY_UINT32, 2, 0, 6, + 9, INFINITY_UINT32, 6, 0}; + greedy_algorithms::findMinimumEdge(INFINITY_UINT32, graph_uint32); + std::cout << "\nAll tests have successfully passed!\n"; } From 34def8fa51da4cbf1e72cbac4dcd4ff7876f9aaa Mon Sep 17 00:00:00 2001 From: Monalisa0311 <100229305+Monalisa0311@users.noreply.github.com> Date: Wed, 11 Sep 2024 10:44:18 +0530 Subject: [PATCH 6/8] Update kruskals_minimum_spanning_tree.cpp added new line --- greedy_algorithms/kruskals_minimum_spanning_tree.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp index 54f3dbfd6e7..5c7dfb27997 100644 --- a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp +++ b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp @@ -185,3 +185,4 @@ int main() { test(); // run Self-test implementation return 0; } + From 9620859abc6f7c15682a0c6b76c50c5dff72c1e7 Mon Sep 17 00:00:00 2001 From: Monalisa0311 <100229305+Monalisa0311@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:13:19 +0530 Subject: [PATCH 7/8] Update kruskals_minimum_spanning_tree.cpp Formatting changed --- .../kruskals_minimum_spanning_tree.cpp | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp index 5c7dfb27997..e7077b5831c 100644 --- a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp +++ b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp @@ -73,77 +73,77 @@ constexpr uint32_t INFINITY_UINT32 = UINT32_MAX; * @returns void */ static void test() { - // Test case with interger values + // Test case with integer values std::cout << "\nTest Case 1 :\n"; std::array, 6> graph1{ 0, 4, 1, 4, INFINITY_INT, INFINITY_INT, 4, 0, 3, 8, 3, INFINITY_INT, 1, 3, 0, INFINITY_INT, 1, INFINITY_INT, 4, 8, INFINITY_INT, 0, 5, 7, - INFINITY_INT, 3, 1, 5, 0, INFINITY_INT, + INFINITY_INT, 3, 1, 5, 0, INFINITY_INT, INFINITY_INT, INFINITY_INT, INFINITY_INT, 7, INFINITY_INT, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, graph1); // Test case with floating values std::cout << "\nTest Case 2 :\n"; std::array, 3> graph2{ - 0.0f, 2.5f, INFINITY_FLOAT, - 2.5f, 0.0f, 3.2f, - INFINITY_FLOAT, 3.2f, 0.0f}; + 0.0f, 2.5f, INFINITY_FLOAT, + 2.5f, 0.0f, 3.2f, + INFINITY_FLOAT, 3.2f, 0.0f}; greedy_algorithms::findMinimumEdge(INFINITY_FLOAT, graph2); // Test case with double values std::cout << "\nTest Case 3 :\n"; std::array, 5> graph3{ - 0.0, 10.5, INFINITY_DOUBLE, 6.7, 3.3, - 10.5, 0.0, 8.1, 15.4, INFINITY_DOUBLE, - INFINITY_DOUBLE, 8.1, 0.0, INFINITY_DOUBLE, 7.8, - 6.7, 15.4, INFINITY_DOUBLE, 0.0, 9.9, - 3.3, INFINITY_DOUBLE, 7.8, 9.9, 0.0}; + 0.0, 10.5, INFINITY_DOUBLE, 6.7, 3.3, + 10.5, 0.0, 8.1, 15.4, INFINITY_DOUBLE, + INFINITY_DOUBLE, 8.1, 0.0, INFINITY_DOUBLE, 7.8, + 6.7, 15.4, INFINITY_DOUBLE, 0.0, 9.9, + 3.3, INFINITY_DOUBLE, 7.8, 9.9, 0.0}; greedy_algorithms::findMinimumEdge(INFINITY_DOUBLE, graph3); // Test Case with negative weights std::cout << "\nTest Case 4 :\n"; std::array, 3> graph_neg{ - 0, -2, 4, - -2, 0, 3, - 4, 3, 0}; + 0, -2, 4, + -2, 0, 3, + 4, 3, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, graph_neg); // Test Case with Self-Loops std::cout << "\nTest Case 5 :\n"; std::array, 3> graph_self_loop{ - 2, 1, INFINITY_INT, - INFINITY_INT, 0, 4, - INFINITY_INT, 4, 0}; + 2, 1, INFINITY_INT, + INFINITY_INT, 0, 4, + INFINITY_INT, 4, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, graph_self_loop); // Test Case with no edges std::cout << "\nTest Case 6 :\n"; std::array, 4> no_edges{ - 0, INFINITY_INT, INFINITY_INT, INFINITY_INT, - INFINITY_INT, 0, INFINITY_INT, INFINITY_INT, - INFINITY_INT, INFINITY_INT, 0, INFINITY_INT, - INFINITY_INT, INFINITY_INT, INFINITY_INT, 0}; + 0, INFINITY_INT, INFINITY_INT, INFINITY_INT, + INFINITY_INT, 0, INFINITY_INT, INFINITY_INT, + INFINITY_INT, INFINITY_INT, 0, INFINITY_INT, + INFINITY_INT, INFINITY_INT, INFINITY_INT, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, no_edges); // Test Case with a non-connected graph std::cout << "\nTest Case 7:\n"; std::array, 4> partial_graph{ - 0, 2, INFINITY_INT, 6, - 2, 0, 3, INFINITY_INT, - INFINITY_INT, 3, 0, 4, - 6, INFINITY_INT, 4, 0}; + 0, 2, INFINITY_INT, 6, + 2, 0, 3, INFINITY_INT, + INFINITY_INT, 3, 0, 4, + 6, INFINITY_INT, 4, 0}; greedy_algorithms::findMinimumEdge(INFINITY_INT, partial_graph); - // Test Case with Directed weighted graph. Krushkal algorithm does not give + // Test Case with Directed weighted graph. The Krushkal algorithm does not give // optimal answer std::cout << "\nTest Case 8:\n"; std::array, 4> directed_graph{ - 0, 3, 7, INFINITY_INT, // Vertex 0 has edges to Vertex 1 and Vertex 2 - INFINITY_INT, 0, 2, 5, // Vertex 1 has edges to Vertex 2 and Vertex 3 - INFINITY_INT, INFINITY_INT, 0, 1, // Vertex 2 has an edge to Vertex 3 - INFINITY_INT, INFINITY_INT, INFINITY_INT, 0}; // Vertex 3 has no outgoing edges + 0, 3, 7, INFINITY_INT, // Vertex 0 has edges to Vertex 1 and Vertex 2 + INFINITY_INT, 0, 2, 5, // Vertex 1 has edges to Vertex 2 and Vertex 3 + INFINITY_INT, INFINITY_INT, 0, 1, // Vertex 2 has an edge to Vertex 3 + INFINITY_INT, INFINITY_INT, INFINITY_INT, 0}; // Vertex 3 has no outgoing edges greedy_algorithms::findMinimumEdge(INFINITY_INT, directed_graph); // Test case with wrong input passed @@ -154,7 +154,7 @@ static void test() { 5, 5, 5, 5}; greedy_algorithms::findMinimumEdge(INFINITY_INT, graph9); - // Test case with all same values between every edges + // Test case with all the same values between every edge std::cout << "\nTest Case 10:\n"; std::array, 5> graph10{ 0, 5, 5, 5, 5, From 3bf29997e2521fdab352474045536c0afb3fed69 Mon Sep 17 00:00:00 2001 From: Monalisa0311 <100229305+Monalisa0311@users.noreply.github.com> Date: Thu, 12 Sep 2024 09:16:35 +0530 Subject: [PATCH 8/8] Update kruskals_minimum_spanning_tree.cpp move infinity valued inside test --- .../kruskals_minimum_spanning_tree.cpp | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp index e7077b5831c..ed7fc831657 100644 --- a/greedy_algorithms/kruskals_minimum_spanning_tree.cpp +++ b/greedy_algorithms/kruskals_minimum_spanning_tree.cpp @@ -57,22 +57,22 @@ void findMinimumEdge(const T &infinity, } } // namespace greedy_algorithms -/** - * define a large constant value for int - * define a large constant value for float - * define a large constant value for double - * define infinity for uint32_t - */ -constexpr int INFINITY_INT = std::numeric_limits::max(); -constexpr float INFINITY_FLOAT = std::numeric_limits::max(); -constexpr double INFINITY_DOUBLE = std::numeric_limits::max(); -constexpr uint32_t INFINITY_UINT32 = UINT32_MAX; - /** * @brief Self-test implementations * @returns void */ static void test() { + /** + * define a large value for int + * define a large value for float + * define a large value for double + * define a large value for uint32_t + */ + constexpr int INFINITY_INT = std::numeric_limits::max(); + constexpr float INFINITY_FLOAT = std::numeric_limits::max(); + constexpr double INFINITY_DOUBLE = std::numeric_limits::max(); + constexpr uint32_t INFINITY_UINT32 = UINT32_MAX; + // Test case with integer values std::cout << "\nTest Case 1 :\n"; std::array, 6> graph1{