Это довольно просто. Создайте случайную перестановку узлов, но интерпретируйте список следующим образом: интерпретируйте его как случайный обход узлов, и если узел «b» появляется после узла «a», это означает, что узел «b» появляется ниже узла «a». в списках:
Итак, если ваша начальная случайная перестановка равна
3 2 5 1 4
Тогда обход в этом случае 3 -> 2 -> 5 -> 1 -> 4
, и вы создаете строки следующим образом:
Row 1: 1 2 3 4 5
Row 2: 4 5 2 3 1
Эта случайная прогулка удовлетворит оба условия.
Но вы хотите разрешить более одного цикла в вашей сети? Я знаю, что вы не хотите, чтобы два человека носили шляпы друг друга. Но как насчет 7 человек, у которых 3 есть шляпы друг друга, а у других 4 шляпы друг друга? Это приемлемо и / или желательно?