Мені хотілося б знати, чи вивчалася раніше така проста проблема і чи відоме якесь рішення.
Нехай G - кінцева (MxN) сітка, S - підмножина клітин G ("крихти"). Як кажуть, дві крихти (локально) з'єднані, якщо їх координати відрізняються щонайбільше однією (тобто, якщо вони намальовані як квадрати, вони поділяють принаймні одну кутову точку).
Тепер можна спробувати з'єднати крихти (їх набір у цілому), переставляючи лінії та стовпчики сітки. Іншими словами, мета - придумати перестановку ліній та перестановку стовпчиків, щоб будь-які дві крихти в отриманій сітці були з'єднані ланцюжком (локально) з'єднаних крихт.
Питання: чи завжди є рішення?
Я не знаю, як це напасти. Через відсутність кращої ідеї я написав необроблену програму, яка шукає рішення грубою силою (вона генерує перестановки навмання та перевіряє, чи є в отриманій сітці підключені крихти). Програма до цих пір завжди знаходила рішення для малих (10x10 або 7x14) сіток, а більші сітки явно поза межами її спрощеної стратегії (потрібно було б занадто багато часу, щоб випадково натрапити на рішення).
Ось приклад сітки, вирішеної програмою:
Початкова сітка (крихти позначаються символами X, порожні клітини крапками):
0 1 2 3 4 5 6 7 8 9
0 X . X X . X . X X .
1 X . . . . X . . . .
2 . . X . . . . X . X
3 . X . . X . X . . X
4 . . . X . . . . . .
5 X X . . . X X . X .
6 . . . X . . . . X .
7 X . X . . X . . . .
8 X . . . X . . X X .
Рішення:
6 1 4 7 8 2 9 3 5 0
1 . . . . . . . . X X
4 . . . . . . . X . .
5 X X . . X . . . X X
8 . . X X X . . . . X
7 . . . . . X . . X X
0 . . . X X X . X X X
3 X X X . . . X . . .
6 . . . . X . . X . .
2 . . . X . X X . . .
Природно, проблему можна легко узагальнити до будь-якого виміру d> 2. Я припускаю, що інші узагальнення можна розглянути.
Спасибі заздалегідь,
Yann David