Я хочу найти все возможные пути в неориентированном, но взвешенном графике
Я провел некоторый поиск по dijkstra, но я только могу найти кратчайший путь, даже глядя в коде, я не могу найти каждый путь (я думаю, что это из-за метода, используемого dijkstra, чтобы не искать каждый путь)
Я знаю начальную точку, но не конечную точку, все, что я хочу, — это не более X (по весу) на моем пути (и, конечно, ВСЕ пути < ИКС)
Допустим, у меня есть этот массив для определения моей точки (в php):
$aRoutes = array(
array(0,0,0),
array(0,1,10),
array(0,2,20),
array(0,3,30),
array(0,4,100),
array(1,1,0),
array(1,2,50),
array(1,3,15),
array(1,4,10),
array(2,2,0), //2->3 is below in the form 3->2
array(2,4,10),
array(3,3,0),
array(3,2,20),//but it's not oriented !
array(3,4,60),
array(4,4,0)
);
Как видите, на каждом шаге есть 4 пути.
Теперь, начиная с шага 0, я хочу знать каждый путь, который меньше 50 (если бы я мог иметь каждый «самый длинный», который был бы лучшим кодом! :))
В нашем случае любой путь может быть:
0->1 = 10
0->1->3 = 25
0->1->3->2 = 45
0->1->4 = 20
0->1->4->2 = 30
0->1->4->2->3 = 50
0->2 = 20
0->2->3 = 40
0->2->4 = 30
0->3 = 30
0->3->1 = 45
0->3->2 = 50
Как видите, «лучшим» является 0->1->4->2->3 = 50
(довольно легко узнать, так как он самый длинный)
Я довольно плохо разбираюсь в рекурсивном кодировании, поэтому я прошу вашей помощи (я едва понимаю, что делается в каждом коде dijkstra, который я нашел)
(может быть написан на php, java, vb, c, c ++, я понимаю каждого и могу перевести его, как только получу … немного предпочтений для php: p)
Заранее благодарю за помощь
Задача ещё не решена.
Других решений пока нет …