diff --git a/build/CMakeFiles/HLlib.dir/compiler_depend.internal b/build/CMakeFiles/HLlib.dir/compiler_depend.internal index db37b2e..72acd14 100644 --- a/build/CMakeFiles/HLlib.dir/compiler_depend.internal +++ b/build/CMakeFiles/HLlib.dir/compiler_depend.internal @@ -184,11 +184,13 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o /usr/include/c++/11.2.0/bits/ostream.tcc /usr/include/c++/11.2.0/istream /usr/include/c++/11.2.0/bits/istream.tcc - /usr/include/c++/11.2.0/vector - /usr/include/c++/11.2.0/bits/stl_uninitialized.h - /usr/include/c++/11.2.0/bits/stl_vector.h - /usr/include/c++/11.2.0/bits/stl_bvector.h - /usr/include/c++/11.2.0/bits/vector.tcc + /usr/include/c++/11.2.0/set + /usr/include/c++/11.2.0/bits/stl_tree.h + /usr/include/c++/11.2.0/ext/aligned_buffer.h + /usr/include/c++/11.2.0/bits/node_handle.h + /usr/include/c++/11.2.0/bits/stl_set.h + /usr/include/c++/11.2.0/bits/stl_multiset.h + /usr/include/c++/11.2.0/bits/erase_if.h /usr/include/c++/11.2.0/fstream /usr/include/c++/11.2.0/bits/codecvt.h /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/basic_file.h @@ -237,18 +239,16 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o /usr/include/c++/11.2.0/bits/refwrap.h /usr/include/c++/11.2.0/bits/std_function.h /usr/include/c++/11.2.0/unordered_map - /usr/include/c++/11.2.0/ext/aligned_buffer.h /usr/include/c++/11.2.0/bits/hashtable.h /usr/include/c++/11.2.0/bits/hashtable_policy.h - /usr/include/c++/11.2.0/bits/node_handle.h /usr/include/c++/11.2.0/bits/unordered_map.h - /usr/include/c++/11.2.0/bits/erase_if.h + /usr/include/c++/11.2.0/vector + /usr/include/c++/11.2.0/bits/stl_uninitialized.h + /usr/include/c++/11.2.0/bits/stl_vector.h + /usr/include/c++/11.2.0/bits/stl_bvector.h + /usr/include/c++/11.2.0/bits/vector.tcc /usr/include/c++/11.2.0/pstl/execution_defs.h /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/HiddenLines.h - /usr/include/c++/11.2.0/set - /usr/include/c++/11.2.0/bits/stl_tree.h - /usr/include/c++/11.2.0/bits/stl_set.h - /usr/include/c++/11.2.0/bits/stl_multiset.h /usr/include/c++/11.2.0/map /usr/include/c++/11.2.0/bits/stl_map.h /usr/include/c++/11.2.0/bits/stl_multimap.h diff --git a/build/CMakeFiles/HLlib.dir/compiler_depend.make b/build/CMakeFiles/HLlib.dir/compiler_depend.make index a22de86..314ddc3 100644 --- a/build/CMakeFiles/HLlib.dir/compiler_depend.make +++ b/build/CMakeFiles/HLlib.dir/compiler_depend.make @@ -183,11 +183,13 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/bits/ostream.tcc \ /usr/include/c++/11.2.0/istream \ /usr/include/c++/11.2.0/bits/istream.tcc \ - /usr/include/c++/11.2.0/vector \ - /usr/include/c++/11.2.0/bits/stl_uninitialized.h \ - /usr/include/c++/11.2.0/bits/stl_vector.h \ - /usr/include/c++/11.2.0/bits/stl_bvector.h \ - /usr/include/c++/11.2.0/bits/vector.tcc \ + /usr/include/c++/11.2.0/set \ + /usr/include/c++/11.2.0/bits/stl_tree.h \ + /usr/include/c++/11.2.0/ext/aligned_buffer.h \ + /usr/include/c++/11.2.0/bits/node_handle.h \ + /usr/include/c++/11.2.0/bits/stl_set.h \ + /usr/include/c++/11.2.0/bits/stl_multiset.h \ + /usr/include/c++/11.2.0/bits/erase_if.h \ /usr/include/c++/11.2.0/fstream \ /usr/include/c++/11.2.0/bits/codecvt.h \ /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/basic_file.h \ @@ -236,18 +238,16 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/bits/refwrap.h \ /usr/include/c++/11.2.0/bits/std_function.h \ /usr/include/c++/11.2.0/unordered_map \ - /usr/include/c++/11.2.0/ext/aligned_buffer.h \ /usr/include/c++/11.2.0/bits/hashtable.h \ /usr/include/c++/11.2.0/bits/hashtable_policy.h \ - /usr/include/c++/11.2.0/bits/node_handle.h \ /usr/include/c++/11.2.0/bits/unordered_map.h \ - /usr/include/c++/11.2.0/bits/erase_if.h \ + /usr/include/c++/11.2.0/vector \ + /usr/include/c++/11.2.0/bits/stl_uninitialized.h \ + /usr/include/c++/11.2.0/bits/stl_vector.h \ + /usr/include/c++/11.2.0/bits/stl_bvector.h \ + /usr/include/c++/11.2.0/bits/vector.tcc \ /usr/include/c++/11.2.0/pstl/execution_defs.h \ ../src/HiddenLines.h \ - /usr/include/c++/11.2.0/set \ - /usr/include/c++/11.2.0/bits/stl_tree.h \ - /usr/include/c++/11.2.0/bits/stl_set.h \ - /usr/include/c++/11.2.0/bits/stl_multiset.h \ /usr/include/c++/11.2.0/map \ /usr/include/c++/11.2.0/bits/stl_map.h \ /usr/include/c++/11.2.0/bits/stl_multimap.h \ @@ -256,9 +256,15 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/map: -/usr/include/c++/11.2.0/bits/hashtable_policy.h: +/usr/include/c++/11.2.0/bits/vector.tcc: -/usr/include/c++/11.2.0/ext/aligned_buffer.h: +/usr/include/c++/11.2.0/bits/stl_vector.h: + +/usr/include/c++/11.2.0/bits/stl_uninitialized.h: + +/usr/include/c++/11.2.0/vector: + +/usr/include/c++/11.2.0/bits/hashtable_policy.h: /usr/include/c++/11.2.0/bits/invoke.h: @@ -318,17 +324,11 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/c++/11.2.0/fstream: -/usr/include/c++/11.2.0/bits/vector.tcc: - -/usr/include/c++/11.2.0/set: +/usr/include/c++/11.2.0/ext/aligned_buffer.h: /usr/include/c++/11.2.0/bits/stl_bvector.h: -/usr/include/c++/11.2.0/bits/stl_vector.h: - -/usr/include/c++/11.2.0/bits/stl_uninitialized.h: - -/usr/include/c++/11.2.0/vector: +/usr/include/c++/11.2.0/set: /usr/include/c++/11.2.0/bits/istream.tcc: @@ -542,10 +542,10 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: ../src/HiddenLines.cpp \ /usr/include/bits/libc-header-start.h: -/usr/include/c++/11.2.0/bits/stl_multiset.h: - /usr/include/c++/11.2.0/functional: +/usr/include/c++/11.2.0/bits/stl_multiset.h: + /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h: /usr/include/bits/byteswap.h: diff --git a/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o b/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o index 7e74e61..138655a 100644 Binary files a/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o and b/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o differ diff --git a/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o.d b/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o.d index 2ff175e..510c284 100644 --- a/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o.d +++ b/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o.d @@ -129,11 +129,13 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: \ /usr/include/c++/11.2.0/bits/locale_facets.tcc \ /usr/include/c++/11.2.0/bits/basic_ios.tcc \ /usr/include/c++/11.2.0/bits/ostream.tcc /usr/include/c++/11.2.0/istream \ - /usr/include/c++/11.2.0/bits/istream.tcc /usr/include/c++/11.2.0/vector \ - /usr/include/c++/11.2.0/bits/stl_uninitialized.h \ - /usr/include/c++/11.2.0/bits/stl_vector.h \ - /usr/include/c++/11.2.0/bits/stl_bvector.h \ - /usr/include/c++/11.2.0/bits/vector.tcc /usr/include/c++/11.2.0/fstream \ + /usr/include/c++/11.2.0/bits/istream.tcc /usr/include/c++/11.2.0/set \ + /usr/include/c++/11.2.0/bits/stl_tree.h \ + /usr/include/c++/11.2.0/ext/aligned_buffer.h \ + /usr/include/c++/11.2.0/bits/node_handle.h \ + /usr/include/c++/11.2.0/bits/stl_set.h \ + /usr/include/c++/11.2.0/bits/stl_multiset.h \ + /usr/include/c++/11.2.0/bits/erase_if.h /usr/include/c++/11.2.0/fstream \ /usr/include/c++/11.2.0/bits/codecvt.h \ /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/basic_file.h \ /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/c++io.h \ @@ -174,17 +176,16 @@ CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o: \ /usr/include/c++/11.2.0/bits/refwrap.h \ /usr/include/c++/11.2.0/bits/std_function.h \ /usr/include/c++/11.2.0/unordered_map \ - /usr/include/c++/11.2.0/ext/aligned_buffer.h \ /usr/include/c++/11.2.0/bits/hashtable.h \ /usr/include/c++/11.2.0/bits/hashtable_policy.h \ - /usr/include/c++/11.2.0/bits/node_handle.h \ /usr/include/c++/11.2.0/bits/unordered_map.h \ - /usr/include/c++/11.2.0/bits/erase_if.h \ + /usr/include/c++/11.2.0/vector \ + /usr/include/c++/11.2.0/bits/stl_uninitialized.h \ + /usr/include/c++/11.2.0/bits/stl_vector.h \ + /usr/include/c++/11.2.0/bits/stl_bvector.h \ + /usr/include/c++/11.2.0/bits/vector.tcc \ /usr/include/c++/11.2.0/pstl/execution_defs.h \ /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/HiddenLines.h \ - /usr/include/c++/11.2.0/set /usr/include/c++/11.2.0/bits/stl_tree.h \ - /usr/include/c++/11.2.0/bits/stl_set.h \ - /usr/include/c++/11.2.0/bits/stl_multiset.h /usr/include/c++/11.2.0/map \ - /usr/include/c++/11.2.0/bits/stl_map.h \ + /usr/include/c++/11.2.0/map /usr/include/c++/11.2.0/bits/stl_map.h \ /usr/include/c++/11.2.0/bits/stl_multimap.h \ /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h diff --git a/build/CMakeFiles/linelib.dir/src/Line.cpp.o b/build/CMakeFiles/linelib.dir/src/Line.cpp.o index 5f26e33..661e98f 100644 Binary files a/build/CMakeFiles/linelib.dir/src/Line.cpp.o and b/build/CMakeFiles/linelib.dir/src/Line.cpp.o differ diff --git a/build/CMakeFiles/main.dir/compiler_depend.internal b/build/CMakeFiles/main.dir/compiler_depend.internal index 6e687c3..f9f2ec5 100644 --- a/build/CMakeFiles/main.dir/compiler_depend.internal +++ b/build/CMakeFiles/main.dir/compiler_depend.internal @@ -185,12 +185,23 @@ CMakeFiles/main.dir/src/main.cpp.o /usr/include/c++/11.2.0/istream /usr/include/c++/11.2.0/bits/istream.tcc /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/HiddenLines.h - /usr/include/c++/11.2.0/set + /usr/include/c++/11.2.0/map /usr/include/c++/11.2.0/bits/stl_tree.h /usr/include/c++/11.2.0/ext/aligned_buffer.h /usr/include/c++/11.2.0/bits/node_handle.h - /usr/include/c++/11.2.0/bits/stl_set.h - /usr/include/c++/11.2.0/bits/stl_multiset.h + /usr/include/c++/11.2.0/bits/stl_map.h + /usr/include/c++/11.2.0/tuple + /usr/include/c++/11.2.0/utility + /usr/include/c++/11.2.0/bits/stl_relops.h + /usr/include/c++/11.2.0/array + /usr/include/c++/11.2.0/bits/uses_allocator.h + /usr/include/c++/11.2.0/bits/invoke.h + /usr/include/c++/11.2.0/bits/stl_multimap.h /usr/include/c++/11.2.0/bits/erase_if.h + /usr/include/c++/11.2.0/vector + /usr/include/c++/11.2.0/bits/stl_uninitialized.h + /usr/include/c++/11.2.0/bits/stl_vector.h + /usr/include/c++/11.2.0/bits/stl_bvector.h + /usr/include/c++/11.2.0/bits/vector.tcc /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h diff --git a/build/CMakeFiles/main.dir/compiler_depend.make b/build/CMakeFiles/main.dir/compiler_depend.make index 89c9001..96358cc 100644 --- a/build/CMakeFiles/main.dir/compiler_depend.make +++ b/build/CMakeFiles/main.dir/compiler_depend.make @@ -184,19 +184,50 @@ CMakeFiles/main.dir/src/main.cpp.o: ../src/main.cpp \ /usr/include/c++/11.2.0/istream \ /usr/include/c++/11.2.0/bits/istream.tcc \ ../src/HiddenLines.h \ - /usr/include/c++/11.2.0/set \ + /usr/include/c++/11.2.0/map \ /usr/include/c++/11.2.0/bits/stl_tree.h \ /usr/include/c++/11.2.0/ext/aligned_buffer.h \ /usr/include/c++/11.2.0/bits/node_handle.h \ - /usr/include/c++/11.2.0/bits/stl_set.h \ - /usr/include/c++/11.2.0/bits/stl_multiset.h \ + /usr/include/c++/11.2.0/bits/stl_map.h \ + /usr/include/c++/11.2.0/tuple \ + /usr/include/c++/11.2.0/utility \ + /usr/include/c++/11.2.0/bits/stl_relops.h \ + /usr/include/c++/11.2.0/array \ + /usr/include/c++/11.2.0/bits/uses_allocator.h \ + /usr/include/c++/11.2.0/bits/invoke.h \ + /usr/include/c++/11.2.0/bits/stl_multimap.h \ /usr/include/c++/11.2.0/bits/erase_if.h \ + /usr/include/c++/11.2.0/vector \ + /usr/include/c++/11.2.0/bits/stl_uninitialized.h \ + /usr/include/c++/11.2.0/bits/stl_vector.h \ + /usr/include/c++/11.2.0/bits/stl_bvector.h \ + /usr/include/c++/11.2.0/bits/vector.tcc \ ../src/Line.h +/usr/include/c++/11.2.0/bits/vector.tcc: + +/usr/include/c++/11.2.0/bits/stl_bvector.h: + +/usr/include/c++/11.2.0/bits/stl_vector.h: + +/usr/include/c++/11.2.0/bits/stl_uninitialized.h: + +/usr/include/c++/11.2.0/vector: + +/usr/include/c++/11.2.0/bits/invoke.h: + +/usr/include/c++/11.2.0/bits/uses_allocator.h: + +/usr/include/c++/11.2.0/array: + +/usr/include/c++/11.2.0/bits/stl_relops.h: + +/usr/include/c++/11.2.0/tuple: + /usr/include/c++/11.2.0/ext/aligned_buffer.h: -/usr/include/c++/11.2.0/set: +/usr/include/c++/11.2.0/map: /usr/include/c++/11.2.0/bits/istream.tcc: @@ -230,8 +261,12 @@ CMakeFiles/main.dir/src/main.cpp.o: ../src/main.cpp \ /usr/include/errno.h: +/usr/include/c++/11.2.0/bits/stl_multimap.h: + /usr/include/c++/11.2.0/cerrno: +/usr/include/c++/11.2.0/bits/stl_map.h: + /usr/include/bits/stdio.h: /usr/include/bits/types/struct_FILE.h: @@ -350,8 +385,6 @@ CMakeFiles/main.dir/src/main.cpp.o: ../src/main.cpp \ /usr/include/bits/pthread_stack_min-dynamic.h: -/usr/include/c++/11.2.0/bits/stl_set.h: - /usr/include/c++/11.2.0/bits/move.h: /usr/include/c++/11.2.0/cctype: @@ -382,8 +415,6 @@ CMakeFiles/main.dir/src/main.cpp.o: ../src/main.cpp \ /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/gthr-default.h: -/usr/include/c++/11.2.0/bits/stl_multiset.h: - ../src/main.cpp: /usr/include/c++/11.2.0/x86_64-pc-linux-gnu/bits/cpu_defines.h: @@ -432,6 +463,8 @@ CMakeFiles/main.dir/src/main.cpp.o: ../src/main.cpp \ /usr/include/bits/types/time_t.h: +/usr/include/c++/11.2.0/utility: + /usr/include/c++/11.2.0/debug/debug.h: /usr/include/c++/11.2.0/bits/predefined_ops.h: diff --git a/build/CMakeFiles/main.dir/src/main.cpp.o b/build/CMakeFiles/main.dir/src/main.cpp.o index 553b2c6..a6a1a16 100644 Binary files a/build/CMakeFiles/main.dir/src/main.cpp.o and b/build/CMakeFiles/main.dir/src/main.cpp.o differ diff --git a/build/CMakeFiles/main.dir/src/main.cpp.o.d b/build/CMakeFiles/main.dir/src/main.cpp.o.d index bec74f0..73d6015 100644 --- a/build/CMakeFiles/main.dir/src/main.cpp.o.d +++ b/build/CMakeFiles/main.dir/src/main.cpp.o.d @@ -131,16 +131,18 @@ CMakeFiles/main.dir/src/main.cpp.o: \ /usr/include/c++/11.2.0/bits/ostream.tcc /usr/include/c++/11.2.0/istream \ /usr/include/c++/11.2.0/bits/istream.tcc \ /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/HiddenLines.h \ - /usr/include/c++/11.2.0/set /usr/include/c++/11.2.0/bits/stl_tree.h \ + /usr/include/c++/11.2.0/map /usr/include/c++/11.2.0/bits/stl_tree.h \ /usr/include/c++/11.2.0/ext/aligned_buffer.h \ /usr/include/c++/11.2.0/bits/node_handle.h \ - /usr/include/c++/11.2.0/bits/stl_set.h \ - /usr/include/c++/11.2.0/bits/stl_multiset.h \ - /usr/include/c++/11.2.0/bits/erase_if.h /usr/include/c++/11.2.0/map \ /usr/include/c++/11.2.0/bits/stl_map.h /usr/include/c++/11.2.0/tuple \ /usr/include/c++/11.2.0/utility \ /usr/include/c++/11.2.0/bits/stl_relops.h /usr/include/c++/11.2.0/array \ /usr/include/c++/11.2.0/bits/uses_allocator.h \ /usr/include/c++/11.2.0/bits/invoke.h \ /usr/include/c++/11.2.0/bits/stl_multimap.h \ + /usr/include/c++/11.2.0/bits/erase_if.h /usr/include/c++/11.2.0/vector \ + /usr/include/c++/11.2.0/bits/stl_uninitialized.h \ + /usr/include/c++/11.2.0/bits/stl_vector.h \ + /usr/include/c++/11.2.0/bits/stl_bvector.h \ + /usr/include/c++/11.2.0/bits/vector.tcc \ /home/noah/Documents/School/CS-7353_Analysis-of-Algorithms/HW/HW4/src/Line.h diff --git a/build/libHLlib.a b/build/libHLlib.a index 25513ae..76c599d 100644 Binary files a/build/libHLlib.a and b/build/libHLlib.a differ diff --git a/build/liblinelib.a b/build/liblinelib.a index a514ebb..2f9a1dc 100644 Binary files a/build/liblinelib.a and b/build/liblinelib.a differ diff --git a/build/main b/build/main index 6829794..5a8af3c 100755 Binary files a/build/main and b/build/main differ diff --git a/src/HiddenLines.cpp b/src/HiddenLines.cpp index 7474ad5..36b4677 100644 --- a/src/HiddenLines.cpp +++ b/src/HiddenLines.cpp @@ -1,7 +1,7 @@ //Hidden Lines work #include -#include +#include #include #include #include @@ -17,66 +17,116 @@ HL::HL() lines = construct_HWprob(); } +std::map HL::get_map() +{ + return line_holder; +} + + void HL::print_sol() { auto sol = get_sol(); - for(auto itr = sol.begin(); itr != sol.end(); itr++) - std::cout << "Line ID " << std::get<0>(*itr) << " visible in range (" << - std::get<0>(std::get<1>(*itr)) << - "," << std::get<1>(std::get<1>(*itr)) << ")" << std::endl; + for(auto itr = sol.begin(); itr != sol.end(); itr++){ + double start_range = std::get<0>(std::get<1>(*itr)); + std::string start_print = std::to_string(start_range); + if(start_range == std::numeric_limits::lowest()) + start_print = "-inf"; + + double stop_range = std::get<1>(std::get<1>(*itr)); + std::string stop_print = std::to_string(stop_range); + if(stop_range == std::numeric_limits::max()) + stop_print = "inf"; + + std::cout << "Line ID " << std::get<0>(*itr) << " visible from x=" << + start_print << " to x=" << stop_print << std::endl; + } } //Divide and Conquer Strategy using recursive call to divide ls and merge using merge() -std::set HL::gen_sol(const std::set& ls){ +std::vector HL::gen_sol(std::vector& ls){ HL inst = *this; + auto line_holder = inst.get_map(); + if (ls.size() > 2){ //Create left and right half sets int split = ceil(ls.size()/2); - std::set lh; - std::set rh; + std::vector lh; + std::vector rh; //No index access for sets auto end_itr = ls.begin(); std::advance(end_itr, split); for(auto itr = ls.begin(); itr != end_itr; itr++){ - lh.insert(*itr); + lh.push_back(*itr); } for(auto itr = end_itr; itr != ls.end(); itr++){ - rh.insert(*itr); + rh.push_back(*itr); } + std::cout << "Left half is size " << lh.size() << " and right half is size " << rh.size() << std::endl; //Recursive call - auto tmp_sol = merge(inst.gen_sol(lh), inst.gen_sol(rh)); + auto merged = merge(inst.gen_sol(lh), inst.gen_sol(rh)); - for (auto itr = tmp_sol.begin(); itr != tmp_sol.end(); itr++){ + for (auto itr = merged.begin(); itr != merged.end(); itr++){ Line l1 = *itr; - sol.insert(std::make_pair(l1.get_id(), std::make_pair(l1.get_vis_start(), l1.get_vis_end()))); + sol.push_back(std::make_pair(l1.get_id(), std::make_pair(l1.get_vis_start(), l1.get_vis_end()))); } - std::set> piecewise; //Cleanup Solution - for(auto itr = sol.begin(); itr != sol.end();){ + /* + std::set>> new_sol; + for(std::set>>::iterator itr = sol.begin(); itr != sol.end(); itr++){ auto start_range = std::get<0>(std::get<1>(*itr)); auto stop_range = std::get<1>(std::get<1>(*itr)); + double my_slope = std::get<1>(*line_holder.find(std::get<0>(*itr))).get_slope(); + int my_id = std::get<0>(*itr); + + if(start_range == stop_range) + continue; - auto it = std::find_if(piecewise.begin(), piecewise.end(), - [start_range](const std::pair& p ){ return p.first == start_range; }); + //Handle overlaps + + std::set>>::iterator it = std::find_if(sol.begin(), sol.end(), + [start_range, my_id](const std::pair>& p ) + { return (std::get<0>(std::get<1>(p)) == start_range && std::get<0>(p) != my_id); }); - if (it != piecewise.end()){ - //st.erase(it); + if (it != sol.end()){ + double stored_stop = std::get<1>(std::get<1>(*it)); + double stored_slope = std::get<1>(*line_holder.find(std::get<0>(*it))).get_slope(); + int stored_id = std::get<0>(*it); + + std::cout << "Matched" << std::endl; + //Change lines' vis starts and ends + if (my_slope < stored_slope){ + std::get<1>(*line_holder.find(std::get<0>(*itr))).set_vis_start(start_range); + std::get<1>(*line_holder.find(std::get<0>(*itr))).set_vis_end(stored_stop); + new_sol.insert(std::make_pair(my_id, std::make_pair(start_range, stored_stop))); + + std::get<1>(*line_holder.find(std::get<0>(*it))).set_vis_start(stored_stop); + std::get<1>(*line_holder.find(std::get<0>(*it))).set_vis_end(stop_range); + new_sol.insert(std::make_pair(stored_id, std::make_pair(stored_stop, stop_range))); + + } + else{ + std::get<1>(*line_holder.find(std::get<0>(*it))).set_vis_start(start_range); + std::get<1>(*line_holder.find(std::get<0>(*it))).set_vis_end(stored_stop); + new_sol.insert(std::make_pair(stored_id, std::make_pair(start_range, stored_stop))); + + std::get<1>(*line_holder.find(std::get<0>(*itr))).set_vis_start(stored_stop); + std::get<1>(*line_holder.find(std::get<0>(*itr))).set_vis_end(stop_range); + new_sol.insert(std::make_pair(my_id, std::make_pair(stored_stop, stop_range))); + } } - - if (start_range == stop_range){ - sol.erase(itr); - } + else{ - itr++; + new_sol.insert(*itr); } } - - return tmp_sol; + inst.set_sol(new_sol); + */ + return merged; } //Set with 2 lines is a base case: both are visible at +-inf respectively, and intersection is where they change @@ -86,35 +136,32 @@ std::set HL::gen_sol(const std::set& ls){ Line l2 = *(ls.end()); double isec = (l2.get_ycept() - l1.get_ycept())/(l1.get_slope() - l2.get_slope()); - //Smaller Slope: vis from isec to inf - l1.set_vis_start(isec); - l1.set_vis_end(std::numeric_limits::max()); - - //Greater Slope: vis from -inf to isec - l2.set_vis_start(-std::numeric_limits::max()); - l2.set_vis_end(isec); + if (l1.get_slope() < l2.get_slope()){ + l1.set_vis_end(isec); + l2.set_vis_start(isec); + } + else{ + l2.set_vis_end(isec); + l1.set_vis_start(isec); + } //Insert partial solutions - sol.insert(std::make_pair(l1.get_id(), std::make_pair(l1.get_vis_start(), l1.get_vis_end()))); - sol.insert(std::make_pair(l2.get_id(), std::make_pair(l2.get_vis_start(), l2.get_vis_end()))); + sol.push_back(std::make_pair(l1.get_id(), std::make_pair(l1.get_vis_start(), l1.get_vis_end()))); + sol.push_back(std::make_pair(l2.get_id(), std::make_pair(l2.get_vis_start(), l2.get_vis_end()))); return ls; } - //Set with 1 line: vis at +-inf + //Set with 1 line: Just return else{ - auto l1 = *(ls.begin()); - - l1.set_vis_start(-std::numeric_limits::max()); - l1.set_vis_end(std::numeric_limits::max()); - return ls; } } -std::set HL::construct_HWprob(){ +std::vector HL::construct_HWprob(){ //Set to hold all our Lines - std::set lines; + std::set sorted_lines; + std::vector lines; //Hold our doubles from each line std::vector tmp_data; @@ -148,25 +195,48 @@ std::set HL::construct_HWprob(){ Line newline = Line(slope, ycept); newline.set_id(); - lines.insert(newline); - line_holder.insert(std::make_pair(newline.get_id(),newline)); + sorted_lines.insert(newline); + lines.push_back(newline); + + auto line_holder = get_map(); + //line_holder[newline.get_id()] = newline; + line_holder.insert(std::pair (newline.get_id(), newline)); } + //Set most neg slope to start range of -inf, and most pos to stop of inf + Line lend = *lines.end(); + Line lbegin = *lines.begin(); + lend.set_vis_end(std::numeric_limits::max()); + lbegin.set_vis_start(std::numeric_limits::lowest()); + + std::string lend_stop = std::to_string(lend.get_vis_end()); + std::string lbegin_start = std::to_string(lbegin.get_vis_start()); + if(lend.get_vis_end() == std::numeric_limits::max()) + lend_stop = "inf"; + if(lbegin.get_vis_start() == std::numeric_limits::lowest()) + lbegin_start = "-inf"; std::cout << "---------------Sorted Lines by slope:---------------" << std::endl; - for(Line line : lines) + for(Line line : sorted_lines) { std::cout << "Line " << line.get_id() << " has slope " << line.get_slope() << " and a y-intercept of " << line.get_ycept() << std::endl; + std::cout << "Line " << line.get_id() << " visible from x=" << line.get_vis_start() << " to x=" < gen_sol(const std::set& ls); - std::set construct_HWprob(); + std::vector gen_sol(std::vector& ls); + std::vector construct_HWprob(); - std::set get_lines() const; - std::set>> get_sol() const; + std::vector get_lines() const; + std::vector>> get_sol() const; + void set_sol(std::vector>> &new_sol); - std::map line_holder; + std::map get_map(); private: //Solution is in form (Line ID, (vis_start, vis_end)) - std::set>> sol; - std::set lines; + std::vector>> sol; + std::vector lines; + std::map line_holder; }; -std::set merge(std::set lh, std::set rh); +std::vector merge(std::vector lh, std::vector rh); diff --git a/src/Line.cpp b/src/Line.cpp index 8558c1a..ac40f35 100644 --- a/src/Line.cpp +++ b/src/Line.cpp @@ -11,8 +11,10 @@ Line::Line(double x, double y) set_slope(x); set_ycept(y); id = 0; - set_vis_start(-std::numeric_limits::max()); - set_vis_end(std::numeric_limits::max()); + //set_vis_start(-std::numeric_limits::max()); + //set_vis_end(std::numeric_limits::max()); + set_vis_start(0); + set_vis_end(0); } void Line::set_slope(double &x) diff --git a/src/main.cpp b/src/main.cpp index 31f5f4e..9216cc9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,8 +13,12 @@ int main(int argc, char *argv[]) HL inst = HL(); std::cout << std::endl; + Line tmp = *inst.get_lines().end(); + std::cout << "Line "<< tmp.get_id() << " vis from x=" << tmp.get_vis_start() << " to x=" << tmp.get_vis_end() << std::endl; + std::cout << "Generating Solution.\n" << std::endl; - inst.gen_sol(inst.get_lines()); + auto lines = inst.get_lines(); + inst.gen_sol(lines); std::cout << "Solution is: " << std::endl; inst.print_sol();