0

I found a code in the internet for Dijkstra's shortest path algorithm in PHP. The problem is it only shows one possible path. If there are several paths having the same distance, it only outputs one of them.

How can I modify this algorithm to produce all shortest paths?

//set the distance array $_distArr = array(); $_distArr[1][2] = 7; $_distArr[1][3] = 9; $_distArr[1][6] = 14; $_distArr[2][1] = 7; $_distArr[2][3] = 10; $_distArr[2][4] = 15; $_distArr[3][1] = 9; $_distArr[3][2] = 10; $_distArr[3][4] = 11; $_distArr[3][6] = 2; $_distArr[4][2] = 15; $_distArr[4][3] = 11; $_distArr[4][5] = 6; $_distArr[5][4] = 6; $_distArr[5][6] = 9; $_distArr[6][1] = 14; $_distArr[6][3] = 2; $_distArr[6][5] = 9;

//the start and the end $a = 1; $b = 6;

//initialize the array for storing $S = array();//the nearest path with its parent and weight $Q = array();//the left nodes without the nearest path foreach(array_keys($_distArr) as $val) $Q[$val] = 99999; $Q[$a] = 0;

//start calculating while(!empty($Q)){ $min = array_search(min($Q), $Q);//the most min weight if($min == $b) break; foreach($_distArr[$min] as $key=>$val) if(!empty($Q[$key]) && $Q[$min] + $val < $Q[$key]) { $Q[$key] = $Q[$min] + $val; $S[$key] = array($min, $Q[$key]); } unset($Q[$min]); }

//list the path $path = array(); $pos = $b; while($pos != $a){ $path[] = $pos; $pos = $S[$pos][0]; } $path[] = $a; $path = array_reverse($path);

//print result

echo "
From $a to $b"; echo "
The length is ".$S[$b][1]; echo "
Path is ".implode('->', $path);

?>

Raphael
  • 73,212
  • 30
  • 182
  • 400
Bennimert
  • 1
  • 2

0 Answers0