alex_ak1, вот эту матрицу я и называю графом. Внося в неё свитки матрица/граф меняется. Даже с одним свитком вариантов несколько, в зависимости от того, в каком пути его применить. И чтобы гарантировано найти минимум, надёжнее всего рассмотреть все матрицы/графы. В каждой найти свой минимум, а потом найти минимум среди минимумов
Вопрос сводится к тому, как перебрать их все. Это уже творческий вопрос, допускающий несколько решений. Я дал лишь один из возможных вариантов - последавательно найти сначала все возможные матрицы/графы, а потом уже выбирать из них. На мой субъективный вкус он самый понятный и надёжный, но он почти наверняка не самый оптимальный по скорости счёта.
alex_ak1, да, он ищет пути от одной до всех (например, от А до Б и от А до В), но не ищет остальные пути (чтобы найти путь от Б до В его придётся запустить ещё раз), и не отвечает на вопрос в какой последовательности обходить точки, чтобы суммарный путь был минимальной.
alex_ak1, волновой алгоритм может найти только один путь. По сути это первый пункт моего списка.
У вас же задача коммивояжёра? Это отдельная задача, где волновым можно решить только часть её - а именно, найти прохождение одного ребра графа.
alex_ak1, каждый полученный граф является отдельной задачей, в которой надо найти оптимальный путь (по сути это ваша начальная задача без свитков).
Оптимальный путь для графа без свитков может отличаться от оптимального пути графа с применением свитка в одном месте и может отличаться от оптимального пути, где свиток применён в другом месте.
А что именно не получается?
Самое простое не получается? Пусть по одному листу, но всё же не тысяч листов же там?
Ctrl + A (выделить всё)
Ctrl + С (скопировать всё)
Ctrl + V (вставить)
Не всё так просто. В таких задачах часто есть подвохи.
Например, в данном примере, переложив 2 спички из единицы, можно получить "-976". И это только вариант сходу. Может и ещё что-то похитрее есть.
Как минимум на шаге 1 надо ещё уметь распознавать хотя бы основные математические знаки.
А так да: надо тупым перебором рассмотреть все возможные перестановки любых пар спичек. Из всех вариантов оставить только имеющие смысл (дающие цифры и знаки, а не абракадабру).
Если стоит речь об оптимизации, то можно сначала руками выписать то, что имеет смысл переставлять. Например, если разрешена перестановки одной, то из 5 можно забрать только одну спичку и то, только для превращения её в 3. А подставлять одну можно в любой из 2 мест. Если разрешено переставлять 2, то там вариантов уже намного больше. Честно говоря, замучаешься описывать все варианты заранее.
Зачем 16? 8 хватит за глаза. Вряд ли человек будет учиться на таких задачах, которые займут кучу гигов. И как раз для обучения лучше не перебарщивать, чтобы неэффективный код ощущался лучше. Как и разные утечки памяти и прочее.
ССД - да, для комфорта нужен. Проца хватит любого современного (21 и выше года).
Код должен:
- удобо читаемым
- удобным для корректировки
- не перегружающим систему
Можно ещё добавить пунктов, но минимизации количества строк нет в этом списке.