Ваши условия не требуют, чтобы следующая церковь для данного пастора была выбрана случайным образом. Не могли бы вы просто пройтись по списку церквей?
То есть назначьте каждому пастору номер 0-12. Присвойте каждой церкви номер 0-12. Первый месяц:
Месяц 0:
пастор-0 -> церковь-0
пастор-1 -> церковь-1
пастор-2 -> церковь-2
...
пастор-н -> церковь-н
В следующем месяце просто увеличьте один из счетчиков (с циклическим изменением)
Месяц 1:
пастор-0 -> церковь-1
пастор-1 -> церковь-2
пастор-2 -> церковь-3
...
пастор-н -> церковь-0
Затем повторите для оставшихся месяцев:
Месяц 3:
пастор-0 -> церковь-2
пастор-1 -> церковь-3
пастор-2 -> церковь-4
...
пастор- (n-1) -> церковь-0
пастор-н -> церковь-1
Есть очень простой цикл для всего этого (O (n)). Если вас это смущает, я предлагаю попробовать цикл на бумаге, скажем, n = 3.
Если случайность является обязательным требованием, обновите ваш вопрос.
РЕДАКТИРОВАТЬ ПО ПАКСУ
Я удаляю свой ответ и голосую с перевесом, так как это O (n), а расширение моего, чтобы обслужить изменения, было бы по крайней мере O (n ^ 2).
Вы все еще можете иметь случайность, превратив индексы значений pastor-0 через pastor-N в массив пасторов, которые были отсортированы случайным образом, так что это решение по крайней мере так же хорошо, как и мое.
КОНЕЦ РЕДАКТИРОВАНИЯ ПАКСОМ