题目:
分析:
这题的思路是用递归来求解,因为每一步的判断都是类似的,比如找到下一个可以去的地方,然后把总价加上航班价格再把转站次数减一,递归,把这些修改后的参数作为新的参数。这题也有“剪枝”的思想,当总价大于当前更新的最小总价,那么就结束该方向的递归;或者是当前可转站次数为0,搜寻可直接到达的站点是否有目标站点,如果没有,则结束递归,如果有,就尝试更新最小总价。
解题过程:
特殊情况处理。
if(K<0||flights.length==0||n<=1){
return -1;
}
保存可达的航班信息和价格,便于之后查询。
int[][] line=new int[n][n];
for(int i=0;i<flights.length;i++){
line[flights[i][0]][flights[i][1]]=flights[i][2];
}
调用递归,传入当前站点,目标站点,当前总金额,可转站次数。
find(line, src, dst, 0, K);
递归方法:
- 如果转站次数为0,并且当前站点不是目标站点,则寻找是否可以直达目的地。
- 如果当前位置是