Changing from set to vector
This commit is contained in:
parent
6335e796fa
commit
7b00f0fd3b
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||
Binary file not shown.
@ -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
|
||||
|
||||
Binary file not shown.
@ -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
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
Binary file not shown.
@ -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
|
||||
|
||||
BIN
build/libHLlib.a
BIN
build/libHLlib.a
Binary file not shown.
Binary file not shown.
BIN
build/main
BIN
build/main
Binary file not shown.
@ -1,7 +1,7 @@
|
||||
//Hidden Lines work
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <limits>
|
||||
@ -17,66 +17,116 @@ HL::HL()
|
||||
lines = construct_HWprob();
|
||||
}
|
||||
|
||||
std::map<int, Line> 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<double>::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<double>::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<Line> HL::gen_sol(const std::set<Line>& ls){
|
||||
std::vector<Line> HL::gen_sol(std::vector<Line>& 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<Line> lh;
|
||||
std::set<Line> rh;
|
||||
std::vector<Line> lh;
|
||||
std::vector<Line> 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<std::pair<double, double>> piecewise;
|
||||
//Cleanup Solution
|
||||
for(auto itr = sol.begin(); itr != sol.end();){
|
||||
/*
|
||||
std::set<std::pair<int, std::pair<double, double>>> new_sol;
|
||||
for(std::set<std::pair<int, std::pair<double, double>>>::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);
|
||||
|
||||
auto it = std::find_if(piecewise.begin(), piecewise.end(),
|
||||
[start_range](const std::pair<double, double>& p ){ return p.first == start_range; });
|
||||
if(start_range == stop_range)
|
||||
continue;
|
||||
|
||||
if (it != piecewise.end()){
|
||||
//st.erase(it);
|
||||
//Handle overlaps
|
||||
|
||||
std::set<std::pair<int, std::pair<double, double>>>::iterator it = std::find_if(sol.begin(), sol.end(),
|
||||
[start_range, my_id](const std::pair<int, std::pair<double, double>>& p )
|
||||
{ return (std::get<0>(std::get<1>(p)) == start_range && std::get<0>(p) != my_id); });
|
||||
|
||||
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<Line> HL::gen_sol(const std::set<Line>& 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<double>::max());
|
||||
|
||||
//Greater Slope: vis from -inf to isec
|
||||
l2.set_vis_start(-std::numeric_limits<double>::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<double>::max());
|
||||
l1.set_vis_end(std::numeric_limits<double>::max());
|
||||
|
||||
return ls;
|
||||
}
|
||||
}
|
||||
|
||||
std::set<Line> HL::construct_HWprob(){
|
||||
std::vector<Line> HL::construct_HWprob(){
|
||||
//Set to hold all our Lines
|
||||
std::set<Line> lines;
|
||||
std::set<Line> sorted_lines;
|
||||
std::vector<Line> lines;
|
||||
|
||||
//Hold our doubles from each line
|
||||
std::vector<double> tmp_data;
|
||||
@ -148,25 +195,48 @@ std::set<Line> 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<int, Line> (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<double>::max());
|
||||
lbegin.set_vis_start(std::numeric_limits<double>::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<double>::max())
|
||||
lend_stop = "inf";
|
||||
if(lbegin.get_vis_start() == std::numeric_limits<double>::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=" <<line.get_vis_end() << std::endl;
|
||||
|
||||
}
|
||||
std::cout << "-----------------------------------------------------" << std::endl;
|
||||
|
||||
std::cout << "From the sorted lines, we can derive that Line " << lend.get_id() << " is visible from x=" << lend.get_vis_start() <<
|
||||
" to x=" << lend_stop << std::endl;
|
||||
|
||||
std::cout << "From the sorted lines, we can derive that Line " << lbegin.get_id() << " is visible from x=" << lbegin.get_vis_start() <<
|
||||
" to x=" << lbegin.get_vis_end() << std::endl;
|
||||
|
||||
return lines;
|
||||
}
|
||||
|
||||
std::set<Line> merge(std::set<Line> lh, std::set<Line> rh){
|
||||
std::set<Line> merged;
|
||||
std::vector<Line> merge(std::vector<Line> lh, std::vector<Line> rh){
|
||||
std::vector<Line> merged;
|
||||
|
||||
auto litr = lh.begin();
|
||||
auto ritr = rh.begin();
|
||||
@ -179,35 +249,41 @@ std::set<Line> merge(std::set<Line> lh, std::set<Line> rh){
|
||||
//Case 1:
|
||||
if (l1.get_slope() < l2.get_slope()){
|
||||
double isec = (l2.get_ycept() - l1.get_ycept())/(l1.get_slope() - l2.get_slope());
|
||||
l1.set_vis_end(isec);
|
||||
l2.set_vis_start(isec);
|
||||
merged.insert(l1);
|
||||
merged.insert(l2);
|
||||
if(isec < l1.get_vis_end()){
|
||||
l1.set_vis_end(isec);
|
||||
l2.set_vis_start(isec);
|
||||
}
|
||||
merged.push_back(l1);
|
||||
merged.push_back(l2);
|
||||
litr++;
|
||||
}
|
||||
|
||||
else if (l1.get_slope() == l2.get_slope()){
|
||||
else if (l1.get_slope() == l2.get_slope() && l1.get_id() != l2.get_id()){
|
||||
if (l1.get_ycept() > l2.get_ycept()){
|
||||
l2.set_vis_start(0);
|
||||
l2.set_vis_end(0);
|
||||
merged.insert(l1);
|
||||
merged.push_back(l1);
|
||||
}
|
||||
else{
|
||||
l1.set_vis_start(0);
|
||||
l2.set_vis_end(0);
|
||||
merged.insert(l2);
|
||||
l1.set_vis_end(0);
|
||||
merged.push_back(l2);
|
||||
}
|
||||
|
||||
litr++;
|
||||
ritr++;
|
||||
}
|
||||
|
||||
//lh slope > rh
|
||||
else{
|
||||
double isec = (l2.get_ycept() - l1.get_ycept())/(l1.get_slope() - l2.get_slope());
|
||||
l1.set_vis_start(isec);
|
||||
l2.set_vis_end(isec);
|
||||
merged.insert(l1);
|
||||
merged.insert(l2);
|
||||
if(isec < l1.get_vis_start()){
|
||||
l1.set_vis_start(isec);
|
||||
l2.set_vis_end(isec);
|
||||
}
|
||||
|
||||
merged.push_back(l1);
|
||||
merged.push_back(l2);
|
||||
ritr++;
|
||||
}
|
||||
}
|
||||
@ -215,10 +291,15 @@ std::set<Line> merge(std::set<Line> lh, std::set<Line> rh){
|
||||
return merged;
|
||||
}
|
||||
|
||||
std::set<Line> HL::get_lines() const{
|
||||
std::vector<Line> HL::get_lines() const{
|
||||
return lines;
|
||||
}
|
||||
|
||||
std::set<std::pair<int, std::pair<double, double>>> HL::get_sol() const{
|
||||
std::vector<std::pair<int, std::pair<double, double>>> HL::get_sol() const{
|
||||
return sol;
|
||||
}
|
||||
|
||||
void HL::set_sol(std::vector<std::pair<int, std::pair<double, double>>> &new_sol)
|
||||
{
|
||||
sol = new_sol;
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
//Hidden Lines work
|
||||
|
||||
#include <set>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
#include "Line.h"
|
||||
|
||||
@ -11,18 +11,20 @@ class HL
|
||||
HL();
|
||||
|
||||
void print_sol();
|
||||
std::set<Line> gen_sol(const std::set<Line>& ls);
|
||||
std::set<Line> construct_HWprob();
|
||||
std::vector<Line> gen_sol(std::vector<Line>& ls);
|
||||
std::vector<Line> construct_HWprob();
|
||||
|
||||
std::set<Line> get_lines() const;
|
||||
std::set<std::pair<int, std::pair<double, double>>> get_sol() const;
|
||||
std::vector<Line> get_lines() const;
|
||||
std::vector<std::pair<int, std::pair<double, double>>> get_sol() const;
|
||||
void set_sol(std::vector<std::pair<int, std::pair<double, double>>> &new_sol);
|
||||
|
||||
std::map<int, Line> line_holder;
|
||||
std::map<int, Line> get_map();
|
||||
|
||||
private:
|
||||
//Solution is in form (Line ID, (vis_start, vis_end))
|
||||
std::set<std::pair<int, std::pair<double, double>>> sol;
|
||||
std::set<Line> lines;
|
||||
std::vector<std::pair<int, std::pair<double, double>>> sol;
|
||||
std::vector<Line> lines;
|
||||
std::map<int, Line> line_holder;
|
||||
};
|
||||
|
||||
std::set<Line> merge(std::set<Line> lh, std::set<Line> rh);
|
||||
std::vector<Line> merge(std::vector<Line> lh, std::vector<Line> rh);
|
||||
|
||||
@ -11,8 +11,10 @@ Line::Line(double x, double y)
|
||||
set_slope(x);
|
||||
set_ycept(y);
|
||||
id = 0;
|
||||
set_vis_start(-std::numeric_limits<double>::max());
|
||||
set_vis_end(std::numeric_limits<double>::max());
|
||||
//set_vis_start(-std::numeric_limits<double>::max());
|
||||
//set_vis_end(std::numeric_limits<double>::max());
|
||||
set_vis_start(0);
|
||||
set_vis_end(0);
|
||||
}
|
||||
|
||||
void Line::set_slope(double &x)
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user