Separate points in two dimensional space, using axis-parallel lines.
Switch branches/tags
Nothing to show
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:

	X0 Y0
	X1 Y1
	X3 Y2

Here's an actual example.

	1 10
	2 6
	3 8
	4 1
	5 3

The format of the data in the solution files is as follows


Here's an actual example of a solution file (to the previous instance example).

	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.