Заполнение массива в соответствии с условиями
Есть массив x*y (строка, столбец)
Данный массив заполняется циклом отдельно по одной ячейке в строке значениями 1 или 0. Условия:
- Значения заполняются рандомно, но в итоге все должно заполниться 1.
- Если по х (в строке) все 0, берется первое значение. Если уже были попытки заполнения, то берется ячейка, с самой первой попыткой заполнения.
- Переход к заполнению ячеек в новой строке происходит, только если в предыдущей строке есть не менее 2-х ячеек со значением 1.
- Ячейки новой строки заполняются только для ячеек, у которых в предыдущей строке стоит 1, и это не может быть столбец, куда вносилась 1 предыдущей итерации.
Подскажите какой использовать алгоритм, или к каким алгоритмам присмотреться. Просто не хватает немного знаний в этой области. Реализация будет на python3
Ответы (1 шт):
В принципе задача решается если к заполняемым данным добавить временные метки, например: (1, 29.09.2022_12:20)
Действие алгоритма на примере: есть матрица 3*3, все значения none
none,none,none
none,none,none
none,none,none
Запускаем цикл. Каждая итерация цикла должна проходить по новой строке, но у нас условие, переход на новую строку, как только в строке появятся две единицы, иначе мы проходим по всем none, а потом и по всем 0, пока не будет выполнено наше условие, получаем
1, 0, 1
none,none,none
none,none,none
Теперь проходим ко второй строчке, но только в первый столбец, т.к. там мы раньше всех получили 1. Следующей итерацией переходим в первую строку в столбец 2(в 3 не переходим, т.к. не выполняется условие, 2 единицы), и там тоже получаем единицу, получаем:
1, 1, 1
1, none, none
none,none,none
Теперь переходим ко второй строчке в столбец 3, т.к. там в предыдущей ячейке получили раьше всех единицу. Если получаем там едицицу, то идём к третей строке столбец один. И каждая следующая итеррация прыгает между этими строками. Как только заполнится вторая строка, цикл работает между оставшимися ячейками третьей строки.
Это упрощенная модель, по факту матрица будет больше, и данные будут отбрасываться назад (если после единицы мы получаем 0, то ячейка с единицей этого столбца получает тоже ноль)