zoukankan      html  css  js  c++  java
  • 787. Cheapest Flights Within K Stops

    package LeetCode_787
    
    import java.util.*
    import kotlin.collections.ArrayList
    import kotlin.collections.HashMap
    
    /**
     * 787. Cheapest Flights Within K Stops
    https://leetcode.com/problems/cheapest-flights-within-k-stops/description/
    
    There are n cities connected by m flights. Each flight starts from city u and arrives at v with a price w.
    Now given all the cities and flights, together with starting city src and the destination dst,
    your task is to find the cheapest price from src to dst with up to k stops. If there is no such route, output -1.
    
    Example 1:
    Input:
    n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]]
    src = 0, dst = 2, k = 1
    Output: 200
     * */
    class Solution {
        /**
         * solution:bfs, Time complexity:O(K*n^2), Space complexity:O(n)
         * */
        fun findCheapestPrice(n: Int, flights: Array<IntArray>, src: Int, dst: Int, K: Int): Int {
            //create graph
            val graph = HashMap<Int, ArrayList<Pair<Int, Int>>>()
            for (flight in flights) {
                val form = flight[0]
                val to = flight[1]
                val cost = flight[2]
                if (!graph.contains(form)) {
                    graph.put(form, ArrayList())
                }
                graph.get(form)?.add(Pair(to, cost))
            }
            var result = Int.MAX_VALUE
            var step = 0
            val queue = LinkedList<Pair<Int, Int>>()
            //represent need 0 to start
            queue.offer(Pair(src, 0))
            while (queue.isNotEmpty()) {
                //compare with all node
                for (i in 0 until queue.size) {
                    val top = queue.pop()
                    val curLocation = top.first
                    val cost = top.second
                    if (curLocation == dst) {
                        result = Math.min(result, cost)
                    }
                    val list = graph.get(curLocation)
                    if (list != null) {
                        for (item in list) {
                            //current total cost to next location
                            if (cost + item.second > result) {
                                continue//purnning
                            }
                            queue.offer(Pair(item.first, cost + item.second))
                        }
                    }
                }
                if (step++ > K) {
                    break
                }
            }
            return if (result == Int.MAX_VALUE) -1 else result
        }
    }
  • 相关阅读:
    An error happened during template parsing (template: "class path resource [templates/index.html]")(有效转)
    Netty线程模型及EventLoop
    社交网络大时代背景下的店铺社交群
    Shiro
    从n个数中取出m个最大数(复杂度最低)的最好的算法是什么?
    Shiro(基本)
    Shiro(转)
    一:Spring Boot 的配置文件 application.properties
    Spring Boot 基础,理论,简介
    收集整理Idea常用配置及插件
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13140321.html
Copyright © 2011-2022 走看看