| Conditions | 8 |
| Paths | 8 |
| Total Lines | 31 |
| Code Lines | 22 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 1 | ||
| Bugs | 0 | Features | 0 |
| 1 | <?php |
||
| 17 | public function calculateRoad($startX, $startY, $endX, $endY, $graph){ |
||
| 18 | $a = "(".$startX.",".$endX.")"; |
||
| 19 | $b = "(".$startY.",".$endY.")"; |
||
| 20 | |||
| 21 | $short = array(); |
||
| 22 | $query = array(); |
||
| 23 | foreach(array_keys($graph) as $v) $query[$v] = 99999; |
||
| 24 | $query[$a] = 0; |
||
| 25 | |||
| 26 | while(!empty($query)){ |
||
| 27 | $min = array_search(min($query), $query); |
||
| 28 | if($min === $b) break; |
||
| 29 | foreach($graph[$min] as $key => $v){ |
||
| 30 | if(!empty($query[$key]) && $query[$min] + $v < $query[$key]){ |
||
| 31 | $query[$key] = $query[$min] + $v; |
||
| 32 | $short[$key] = array($min, $query[$key]); |
||
| 33 | } |
||
| 34 | } |
||
| 35 | unset($query[$min]); |
||
| 36 | } |
||
| 37 | |||
| 38 | $path = array(); |
||
| 39 | $pos = $b; |
||
| 40 | while($pos != $a){ |
||
| 41 | $path[] = $pos; |
||
| 42 | $pos = $short[$pos][0]; |
||
| 43 | } |
||
| 44 | $path[] = $a; |
||
| 45 | $path = array_reverse($path); |
||
| 46 | |||
| 47 | return $path; |
||
| 48 | } |
||
| 49 | } |