给你一个数组 routes ,表示一系列公交线路,其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶。
    例如,路线 routes[0] = [1, 5, 7] 表示第 0 辆公交车会一直按序列 1 -> 5 -> 7 -> 1 -> 5 -> 7 -> 1 -> … 这样的车站路线行驶。
    现在从 source 车站出发(初始时不在公交车上),要前往 target 车站。 期间仅可乘坐公交车。

    求出 最少乘坐的公交车数量 。如果不可能到达终点车站,返回 -1 。

    示例 1:

    输入:routes = [[1,2,7],[3,6,7]], source = 1, target = 6
    输出:2
    解释:最优策略是先乘坐第一辆公交车到达车站 7 , 然后换乘第二辆公交车到车站 6 。
    示例 2:

    输入:routes = [[7,12],[4,5,15],[6],[15,19],[9,12,13]], source = 15, target = 12
    输出:-1

    提示:

    1 <= routes.length <= 500.
    1 <= routes[i].length <= 105
    routes[i] 中的所有值 互不相同
    sum(routes[i].length) <= 105
    0 <= routes[i][j] < 106
    0 <= source, target < 106

    1. class Solution {
    2. /**
    3. * @param Integer[][] $routes
    4. * @param Integer $source
    5. * @param Integer $target
    6. * @return Integer
    7. */
    8. function numBusesToDestination($routes, $source, $target) {
    9. if($source == $target){
    10. return 0;
    11. }
    12. $routes2 = [];
    13. foreach($routes as $key => $item){
    14. foreach($item as $value){
    15. $routes2[$value][] = $key;
    16. }
    17. }
    18. $arr1 = [$source];
    19. $num = 1;
    20. while(!empty($arr1)){
    21. $arr2 = [];
    22. foreach($arr1 as $value){
    23. foreach($routes2[$value] as $i){
    24. if(isset($routes[$i])){
    25. foreach($routes[$i] as $v){
    26. if($target == $v){
    27. return $num;
    28. }else{
    29. array_push($arr2,$v);
    30. }
    31. }
    32. unset($routes[$i]);
    33. }
    34. }
    35. }
    36. $arr1 = array_unique($arr2);
    37. $num++;
    38. }
    39. return -1;
    40. // // 方案1超出时间限制
    41. // if($source == $target){
    42. // return 0;
    43. // }
    44. // $num = 0;
    45. // $array = [$source];
    46. // while($routes && $array){
    47. // $array2 = [];
    48. // foreach($routes as $key => $item){
    49. // if(array_intersect($item,$array)){
    50. // $item = array_diff($item,$array);
    51. // $array2 = array_merge($array2,$item);
    52. // unset($routes[$key]);
    53. // }
    54. // }
    55. // $array2 = array_unique($array2);
    56. // if($array2){
    57. // $num++;
    58. // if(in_array($target,$array2)){
    59. // break;
    60. // }
    61. // $array = $array2;
    62. // }else{
    63. // $num = 0;
    64. // break;
    65. // }
    66. // }
    67. // if($num > 0){
    68. // return $num;
    69. // }else{
    70. // return -1;
    71. // }
    72. }
    73. }