Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Znajdowanie najkrótszej trasy
Forum PHP.pl > Forum > PHP
kkowalskipl
Witam wszystkich, potrzebuję napisać skrypt.
Treść zadania:
- na mapie Polski wybierz 49 dawnych miast wojewódzkich
- przypisz każdemu miastu kod (np nr 1-49)
- zobacz z iloma sąsiednimi miastami każde miasto ma bezpośrednie połączenie drogowe (ile km), przeciętnie jest połączenie z 3 do 8 miast
- wybierz miasto początkowe i miasto końcowe
- znajdź trasę łącząca wybrane miasta tak aby droga była najkrótsza

Czy ktoś mógłby mnie jakoś nakierować jak mógłbym to zrobić?



Algorytm Dijkstry, Forda-Bellmana, problem komiwojażera, Ant System(mrówkowy), Traveling Salesman Problem(TSP), Ant Colony Optimisation(ACO)...
Kshyhoo
I w czym problem? Mamy to zrobić za Ciebie? Mala pomoc:
  1. <?php
  2. /*
  3. przykładowy graf:
  4.  
  5.   B-------C
  6.   / \ 1 \
  7.   2 / \ \5
  8.   / \ \
  9.   A \4 F
  10.   \ \ /
  11.   3 \ \ /1
  12.   \ \ /
  13.   D-------E
  14.   2
  15.  
  16. autor skryptu: venaas <venaas () nvg ! ntnu ! no>
  17. źródło: <a href="http://marc.theaimsgroup.com/?l=php-general&m=96024323421478&w=2" target="_blank">http://marc.theaimsgroup.com/?l=php-genera...3421478&w=2</a>
  18. */
  19.  
  20. $wezel["A"] = array("B"=>2, "D"=>3);
  21. $wezel["B"] = array("A"=>2, "C"=>1, "E"=>4);
  22. $wezel["C"] = array("B"=>1, "F"=>5);
  23. $wezel["D"] = array("A"=>3, "E"=>2);
  24. $wezel["E"] = array("D"=>2, "B"=>4, "F"=>1);
  25. $wezel["F"] = array("C"=>5, "E"=>1);
  26.  
  27. function dijkstra($wezel, $start) {
  28. $closest = $start;
  29. while(isset($closest)) {
  30. $marked[$closest] = 1;
  31. reset($wezel[$closest]);
  32. while(list($vertex, $distance) = each($wezel[$closest])) {
  33. if ($marked[$vertex]) continue;
  34. $dist = $paths[$closest][0] + $distance;
  35. if (!isset($paths[$vertex]) || $dist<$paths[$vertex][0]) {
  36. $paths[$vertex] = $paths[$closest];
  37. $paths[$vertex][0] = $dist;
  38. $paths[$vertex][1] .= "$closest ";
  39. }
  40. }
  41. unset($closest);
  42. reset($paths);
  43. while(list($vertex, $path) = each($paths)) {
  44. if ($marked[$vertex]) continue;
  45. $distance = $path[0];
  46. if ($distance<$min || !isset($closest)) {
  47. $min = $distance;
  48. $closest = $vertex;
  49. }
  50. }
  51. }
  52. return $paths;
  53. }
  54.  
  55. $start = "F"; // punkt od którego startujesz
  56.  
  57. $sciezki = dijkstra($wezel, $start);
  58. ksort($sciezki);
  59. foreach ($sciezki as $wezel => $sciezka) {
  60. echo "$start=&gt;$wezel: <b>$sciezka[0]</b>
  61. scieżka: [$sciezka[1] $wezel]<br />\n";
  62. }
  63. ?>
Crozin
Czy poza odległością ma być uwzględniane coś jeszcze (np. prędkość poruszania się po danej drodze)? Do poczytania:
a) teoria grafów (wystarczą kompletne podstawy)
cool.gif problem najkrótszej trasy / ścieżki / drogi

Na prawdę w sieci są dziesiątki gotowych rozwiązań z wyczerpującymi opisami.
kkowalskipl
Nie nie, tylko odległość.

Wiele szukałem, ale nie znalazłem nic co rozwiązało mój problem.
Można jakieś linki?
Crozin
Nie wierzę, że pod tym linkiem: graf najkrótsza droga, nie ma niczego co by rozwiązało Twój problem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.