Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
This is a simple program that can separate points on a two-dimensional plane using a number of axis-parallel lines that's usually less than the maximum (n-1, for n points), and usually equal to the minimum. A greedy algorithm is used that assumes that no two points share the same x coordinate, and that no two points share the same y coordinate. Also all x and y coordinates must be restricted to the first quadrant, which is to say that they must be positive values. In addition, the coordinates must be whole numbers. Useful for computing a non-worst-case solution, quickly. The code was made in a rush, and isn't exactly a gem of clarity and perfection, but it does run correctly. As always, improvements are welcome. The program, entirely in `sep.c`, takes a series of input files whose names are formated "instanceNN", where NN is 00 to 99. All the solutions are written out to a file whose name is formated "greedy_solutionNN", where NN corresponds to the number of the instance. For example instance12 yields an output file called greedy_solution12. The format of the data in the instance files is as follows: NUMBER_OF_POINTS X0 Y0 X1 Y1 X3 Y2 Here's an actual example. 5 1 10 2 6 3 8 4 1 5 3 The format of the data in the solution files is as follows NUMBER_OF_LINES ORIENTATION_OF_LINE0 AXIS_INTERSECT0 ORIENTATION_OF_LINE1 AXIS_INTERSECT1 ORIENTATION_OF_LINE2 AXIS_INTERSECT2 Here's an actual example of a solution file (to the previous instance example). 4 v 3.500000 h 7.000000 v 2.500000 v 4.500000 There are four lines, the first is parallel to the y-axis (is vertical) and intersects the x-axis at x=3.5 So far, this code has only been tested on Illumos on X86. But should run in any environment that has a C compiler.