Алгоритъм за намиране на пътя

Правя проект, чиято цел е да намеря по-евтиния начин за изпращане на X мравки от точка А до точка Б с ограничението, че само една мравка може да стои на „между платформи“ – не не знам как да го кажа на английски - с изключение на точка А и Б.

Вече разгледах алгоритми като A* или този на Dijkstra, но те се фокусират само върху най-краткия път за достигане от точка А до точка Б, което в някои случаи не е най-доброто, тъй като бихте предпочели да вземете 2 по-дълги пътя и изпрати повече мравки наведнъж.

И тук имам нужда от теб. Знаете ли такъв алгоритъм?

Надявам се, че съм ясен с въпроса си и ще очаквам с нетърпение отговори. Благодаря.

РЕДАКТИРАНЕ: Ето пример за това къде A* няма да работи:

-L-M-N-O-P-S-T-U-V-W-X-Y-Z--|    Going from one letter
|                  |        |    to another costs 1 turn
H-----I-----J------K        |
|                  |        |
START--A-B-C-D-E-F-G-------END

Ако имам 17 мравки, най-добрият наличен вариант е да изпратя 2 мравки наведнъж в посоки:

  • НАЧАЛО-H-I-J-K-W-X-Y-Z-КРАЙ
  • СТАРТ-A-B-C-D-E-F-G-END

вместо всички в START-H-I-J-K-G-END, както би предложил A* като най-добър вариант.


person Pyos    schedule 03.04.2013    source източник
comment
Гласувах за затваряне на това, защото както стои въпросът, вие „търсите“ решение. Ако публикувате примера A* и обясните какъв е проблемът с него, тогава това прави по-конкретен, ТОЛКОВА валиден въпрос. Предлагаме да добавите и етикета със звезда.   -  person martin clayton    schedule 03.04.2013
comment
Е, аз само искам да разширя знанията си в намирането на пътища   -  person Pyos    schedule 03.04.2013


Отговори (2)


можете да използвате A*, за да решите проблема си, просто трябва да настроите динамично вашата карта, за да вземе предвид позицията на вашите мравки

person tiridactil    schedule 03.04.2013
comment
Да, мислех за това преди, но имам пример, при който A* би се объркал. Ще го публикувам. - person Pyos; 03.04.2013

Можете да използвате floodfill. Това, което прави floodfill, е, че проследява всеки възможен път и определя най-доброто решение, но вие трябва да дефинирате „най-доброто“. Например, можете да създадете променлива за общо време, която проследява времето чрез рекурсия. Можете да направите рекурсивен метод, който връща времевата променлива само когато достигне B, и след това да изберете най-кратката стойност.

person Morgan Hill    schedule 23.10.2016