Slime Molds Can Count!
CJam, 77 95 bytes

I think this can be golfed a bit more, but here goes:

q~$&lt;_{{:X;]{[X\]z::-~mhW*}$~:Y{_)Y1{_@=X@=}:B~-g-{+__X=!\}:C~1B=!&amp;}g{_(Y0B-g-\C0B=!&amp;}g}*]_&amp;}L?p


Input goes like N &lt;Array of coordinate array&gt;. For example:

4 [[0 0] [1 5] [2 1] [0 3] [5 0] [5 5]]


Output:


  [[0 5] [1 5] [0 4] [0 3] [0 0] [0 2] [0 1] [1 1] [2 1]]


Algorithm:

The algorithm is pretty straight forward and goes like:


Sort the input coordinate array. This makes the coordinates sorted first by row and then by column.
Now we pick first N points
Now we reduce on these N points. The destination is the last point and the source is the closes point to that last point.
Then we start with the top-left most point, walk right (or left) till its on or directly above the next point.
Then we walk down to reach the next point.
It is guaranteed that there will be no uncovered point left to the above point in the same row. This ensures that we do not touch any other point that the chosen N. Choosing the closes point also ensures that second rule is held true.


Try it online here