I don't understand the reference to lawn-mowing being NP-complete - I thought I had a good algorithm: mow once around the outside, blowing grass inward, to get the edges without hitting things with the exhaust chute, then afterwards mow concentrically, blowing grass outward. Once the width is less than the turning radius of the mower, switch to only mowing along the long axis of the area.
Now, when there are rocks, stumps or trees within the area things get more interesting, depending on your tolerance for having to sharpen the blades...
Now, when there are rocks, stumps or trees within the area things get more interesting, depending on your tolerance for having to sharpen the blades...