Starting at top left corner, for each row/column pair, solve each ROW then COLUMN, until puzzle is solved at the bottom right square. This does not find the shortest path, but runs at a reasonable complexity.