Comments 9
Хорошая статья, пишите еще, например, решение задачи по сортировке пузырьком
Опять фейспалм...
Сказано про "решение далеко от идеального" и ни слова о сложности самой задачи коммивояжера! Так-то она NP-трудная. И за идеальное решение вы получите миллион долларов - решение задачи тысячилетия.
Нет ни обзора алгоритмов решения, ни указания того, что есть точные методы, приближенные и эвристические... Нет даже оценки точности решения задачи коммивояжера алгоритмом спрямления (тот самый Дейкстра), который гарантирует решение, отличающееся от оптимального не хуже, чем на 50%...
Не описано вообще ничего: ни что такое графы, ни как их можно представить...
- лишние включения в заголовочных файлах, которые нужны только в соответствующем *.cpp;
- using namespace std; в заголовочном файле;
- хардкод и магические числа (например, конструктор класса Graph);
- возврат неконстатного указателя на данные в константном методе класса;
- смешивание кода на языке C с кодом на C++. Если в вашем решении важно, что в одном классе используются именно массивы, а в другом подошел и std::vector, то это стоит пояснить, так как статья явно ориентирована на начинающих;
- сложилось впечатление, что не было оценки возможного количества вершин: почему-то матрица у вас в динамической области, а путь (поле класса Path) в стеке. Если так задумано, то стоит пояснить;
- возврат контейнеров по значению — слишком жирно и вряд ли нужно;
- странная композиция классов, почему внутри Solution своя матрица для графа, а не поле типа Graph?
- в конструкторе Solution присваивание просто указателя (то есть создание плоской копии). Это так задумано, что нигде деструкторов нет и поэтому работает или все-таки недоработка?
- как это в методе Solution::Dijkstra вы создаете статический массив неизвестного размера? Раз материалы и код ориентирован на начинающих, хорошо бы, чтобы проект все же компилировался.
Даже после беглого просмотра кода (а кроме него в статье, в общем-то, ничего нет) получилось найти очевидные замечания (про стиль не стал писать, это уже более субъективно).
Еще раз хочется отметить, что наличие подобных материалов — это хорошо, потому что у тех, кто начинает изучать программирование (и в частности C++) больший выбор. Вместе с тем появляется дополнительная ответственность: не научить человека писать код неправильно.
У меня почему-то тоже названия методов типа Get_data вызывают отторжение. GetData норм. get_data тоже норм. Что не так с Get_data-ой - не понимаю.
Спасибо за комментарий! Это моя первая статья и я учту все замечания.
... Path Solution::calc(vector<int> v, int start) ...
Какой нигодяй Вас учил передавать массив он же вектор копией?
Не прошло и 40 лет. Это же мой диплом 1983 года. Аж прослезился. Нужно сходить на https://pl1.su/ и переповторить.
Пути на графе. Задача коммивояжёра на C++