簡體   English   中英

PHP 行使最便宜的航班

[英]PHP exercise cheapest flight

所以我想在 PHP function 中找到盡可能多的中途停留的最便宜的航班。

$flights = [
["departure" => "BRI", "arrival" => "BDS", "price" => 20],
["departure" => "BRI", "arrival" => "ANC", "price" => 5],
["departure" => "ANC", "arrival" => "CRV", "price" => 3],
["departure" => "CRV", "arrival" => "BDS", "price" => 4],
["departure" => "CRV", "arrival" => "BRI", "price" => 2],
["departure" => "CRV", "arrival" => "XLR", "price" => 3],
["departure" => "SUF", "arrival" => "BDS", "price" => 5],
["departure" => "FLR", "arrival" => "NAP", "price" => 10],
["departure" => "FLR", "arrival" => "BDS", "price" => 1],
["departure" => "FLR", "arrival" => "FRA", "price" => 5],
["departure" => "NAP", "arrival" => "CRV", "price" => 12],
["departure" => "NAP", "arrival" => "BDS", "price" => 16],
["departure" => "NAP", "arrival" => "FLR", "price" => 1],
["departure" => "XLR", "arrival" => "BRI", "price" => 3],
["departure" => "BOL", "arrival" => "FRA", "price" => 3],
["departure" => "BOL", "arrival" => "FLR", "price" => 10],
["departure" => "FRA", "arrival" => "NAP", "price" => 3],

假設這張表 function 帶有“BRI”->“BDS”應該給我“12”(BRI->ANC,ANC->CRV CRV->BDS)

function giveMeLower($departure, $arrival) { global $flights; $price = 0;

foreach ($flights as $flight) {
    if (($flight["departure"] == $departure) and ($flight["arrival"] == $arrival)) {
        $price = $flight["price"];
    }
}

foreach ($flights as $volo) {
    if (($volo["departure"] == $departure)) {

        $tempPrice = $volo["price"];
        $scalo = $volo["arrival"];

        foreach ($flights as $volo_int) {
            if (($volo_int["departure"] == $scalo) and $volo_int["arrival"] == $arrival) {
                $tempPrice += $volo_int["price"];
                if ($tempPrice < $price || $price == 0) {
                    $price = $tempPrice;
                }
            }
        }
    }
}

return $price == 0 ? "No flight found" : $price;
}

這是我嘗試過的,它有效,但只有一次中途停留。

一些建議只要它可以做到 go ?

謝謝!

Yuya Aratani ,我認為在這方面做得很好。 改編自 Dijkstra 的算法。

“圖表”class 簡單高效。 它完全可以完成您想要的工作!

require 'src/Graph.php';

$graph = Taniko\Dijkstra\Graph::create();

$graph
    ->add('BRI', 'BDS', 20)
    ->add('BRI', 'ANC', 5)
    ->add('ANC', 'CRV', 3)
    ->add('CRV', 'BDS', 4)
    ->add('CRV', 'BRI', 2, false)
    ->add('CRV', 'XLR', 3)
    ->add('SUF', 'BDS', 5)
    ->add('FLR', 'NAP', 10)
    ->add('FLR', 'BDS', 1)
    ->add('FLR', 'FRA', 5)
    ->add('NAP', 'CRV', 12)
    ->add('NAP', 'BDS', 16)
    ->add('NAP', 'FLR', 1)
    ->add('XLR', 'BRI', 3, false)
    ->add('BOL', 'FRA', 3)
    ->add('BOL', 'FLR', 10)
    ->add('FRA', 'NAP', 3);

$route = $graph->search('BRI', 'BDS');
$cost  = $graph->cost($route);

退貨

var_dump($route);//array(4) { [0]=> string(3) "BRI" [1]=> string(3) "ANC" [2]=> string(3) "CRV" [3]=> string(3) "BDS" }
echo $cost;//12

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM