Если определить на финальном множестве функцию качества от WordPlacement которая возвращает число, и поставить экстремальную задачу (поиск максимума), то мы найдем наиболее подходящий кроссворд, например требуя чтобы он был компактен:
(max_cell cell.X - min_cell cell.X)**2 +
(max_cell cell.Y - min_cell cell.Y)**2 -> Минимально