Добрый день.
Хотелось бы увидеть дельные замечания к нему.
Интересует оценка по всем возможным параметрам, например: оптимальность, читаемость (название функций и переменных), понятность комментариев (и в каких местах необходимо убрать или добавить) и т.п.
Также хочется узнать общее впечатление о коде.
Это реализация решения транспортной задачи. Первоначальный план составляется с помощью метода наименьшей стоимости, затем план улучшается с помощью метода потенциалов.
Если по каким-то причинам вы не понимаете о чем идет речь, то вы можете ознакомится с задачей: http://www.resolventa.ru/data/metodstud/transproblem.pdf
Если честно, это такая муть для меня. Вроде звучит здорово, но это ломает мне все итераторы.
Особенно вот здесь и здесь.
И тут начинаются варианты, как это можно исправить. Можно реализовать свой итератор, но внутри него все равно будет доступ по индексу и тогда появляется вопрос, а зачем я вообще использую итераторы для доступа.
Ведь я только только отказался от индексов по совету @defuz. Конечно там и без этого было что изменить, но суть не в этом.
Можно индексировать такими выражениями (i/self.cost.w,i%self.cost.w), но действительно ли оправданно использовать деление на каждой итерации цикла вместо хранения вложенного вектора? Да и читабельность резко снижается.
Я тоже хотел сначала посоветовать использовать общий буфер для матрицы, вместо вектора из векторов, но такое решение спорное из-за того, что в определенных местах, насколько я помню, необходимо добавлять новые колонки и новые столбцы к матрице.
Если бы от этого можно было как-то избавится, например, если можно сразу создавать матрицу нужного размера, а потом заполнять ее, то тогда использования общего буфера было бы идеальным.
Если это сделать никак не получится, то по крайней мере можно ввести тип Matrix, пусть даже внутри будет все тот же Vec<Vec<_>>.
Можно, добавление идет в самом начале и его можно сделать во время инициализации, но я так и не понял что мне делать с итераторами? Получается проще все сделать через индексы.