zoukankan      html  css  js  c++  java
  • K站中转内最便宜的航班

    题目链接:https://leetcode-cn.com/problems/cheapest-flights-within-k-stops
    题目描述:
    有 n 个城市通过一些航班连接。给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 pricei 抵达 toi。
    现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到出一条最多经过 k 站中转的路线,使得从 src 到 dst 的 价格最便宜 ,并返回该价格。 如果不存在这样的路线,则输出 -1。

    题解:

    题解链接LeetCode K站中转内最便宜的航班(回溯法、动态规划)
    回溯法:

    class Solution {
    public:
        int minCost = INT_MAX;
        int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) {
            vector<vector<int>> graph(n, vector<int>(n, -1));
            for(auto &flight : flights)    //构建图信息
                graph[flight[0]][flight[1]] = flight[2];
            vector<bool> visited(n, false);     //标记数组
            visited[src] = true;
            trackingBack(graph, visited, n, dst, k, 0, src, 0);
            return minCost == INT_MAX ? -1 : minCost;
            
        }
    
        void trackingBack(vector<vector<int>> &graph, vector<bool> visited, int n, int dst, int k, int haveCost, int nowSrc, int myK)
        {
            if(nowSrc == dst)  //得到一种方案
            {
                minCost = min(minCost, haveCost);
                return;
            }
                
            //剪枝:中转个数超过了k,花费超过了当前已找到的最小花费
            if(myK > k || haveCost >= minCost)
                return;
            //遍历节点
            for(int i = 0; i < n; i++)
            {
                if(!visited[i] && graph[nowSrc][i] != -1)
                {
                    visited[i] = true;
                    trackingBack(graph, visited, n, dst, k, haveCost + graph[nowSrc][i], i, myK + 1);
                    visited[i] = false;
                }
            }
    
        }
        
    };
    
    
  • 相关阅读:
    哈夫曼树及哈夫曼编码
    01背包问题
    Java IO
    Java对象的复制三种方式
    TCP三次握手和四次挥手
    轻量级Java Web框架的实现原理
    Java并发
    消息队列
    赋值、浅拷贝、深拷贝
    Python文件操作(txtxlsxcsv)及os操作
  • 原文地址:https://www.cnblogs.com/ZigHello/p/15195393.html
Copyright © 2011-2022 走看看