1. 程式人生 > >Dijkstra和Floyd演算法

Dijkstra和Floyd演算法

題目描述

The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for good eating but are not so adept at creating creamy delicious dairy products. Farmer John is leading the charge to deliver plenty of ice cold nutritious milk to Texas so the Texans will not suffer the heat too much.

FJ has studied the routes that can be used to move milk from Wisconsin to Texas. These routes have a total of T (1 <= T <= 2,500) towns conveniently numbered 1..T along the way (including the starting and ending towns). Each town (except the source and destination towns) is connected to at least two other towns by bidirectional roads that have some cost of traversal (owing to gasoline consumption, tolls, etc.). Consider this map of seven towns; town 5 is the

source of the milk and town 4 is its destination (bracketed integers represent costs to traverse the route):


                              [1]----1---[3]-
                             /               \
                      [3]---6---[4]---3--[3]--4
                     /               /       /|
                    5
--[3]-- --[2]- | \ / / | [5]---7---[2]--2---[3]--- | / [1]------

Traversing 5-6-3-4 requires spending 3 (5->6) + 4 (6->3) + 3 (3->4) = 10 total expenses.

Given a map of all the C (1 <= C <= 6,200) connections (described as two endpoints R1i and R2i (1 <= R1i <= T; 1 <= R2i <= T) and costs (1 <= Ci <= 1,000), find the smallest total expense to traverse from the starting town Ts (1 <= Ts <= T) to the destination town Te (1 <= Te <= T).

德克薩斯純樸的民眾們這個夏天正在遭受巨大的熱浪!!!他們的德克薩斯長角牛吃起來不錯,可是他們並不是很擅長生產富含奶油的乳製品。Farmer John此時以先天下之憂而憂,後天下之樂而樂的精神,身先士卒地承擔起向德克薩斯運送大量的營養冰涼的牛奶的重任,以減輕德克薩斯人忍受酷暑的痛苦。

FJ已經研究過可以把牛奶從威斯康星運送到德克薩斯州的路線。這些路線包括起始點和終點先一共經過T (1 <= T <= 2,500)個城鎮,方便地標號為1到T。除了起點和終點外地每個城鎮由兩條雙向道路連向至少兩個其它地城鎮。每條道路有一個通過費用(包括油費,過路費等等)。

給定一個地圖,包含C (1 <= C <= 6,200)條直接連線2個城鎮的道路。每條道路由道路的起點Rs,終點Re (1 <= Rs <= T; 1 <= Re <= T),和花費(1 <= Ci <= 1,000)組成。求從起始的城鎮Ts (1 <= Ts <= T)到終點的城鎮Te(1 <= Te <= T)最小的總費用。

輸入輸出格式

輸入格式:

第一行: 4個由空格隔開的整數: T, C, Ts, Te

第2到第C+1行: 第i+1行描述第i條道路。有3個由空格隔開的整數: Rs, Re和Ci

輸出格式:

一個單獨的整數表示從Ts到Te的最小總費用。資料保證至少存在一條道路。

輸入輸出樣例

輸入樣例#1: 複製
7 11 5 4
2 4 2
1 4 3
7 2 2
3 4 3
5 7 5
7 3 3
6 1 1
6 3 4
2 4 3
5 6 3
7 2 1
輸出樣例#1: 複製
7

說明

【樣例說明】

5->6->1->4 (3 + 1 + 3)

相關推薦

DijkstraFloyd演算法----最短路徑演算法

Dijkstra 轉自:http://blog.chinaunix.net/uid-26548237-id-3834514.html Dijkstra(迪傑斯特拉)演算法是典型的最短路徑路由演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外

演算法學習筆記(三) 最短路 Dijkstra Floyd 演算法

圖論中一個經典問題就是求最短路,最為基礎和最為經典的演算法莫過於 Dijkstra 和 Floyd 演算法,一個是貪心演算法,一個是動態規劃,這也是演算法中的兩大經典代表。用一個簡單圖在紙上一步一步演算, 帶回溯的筆記在這篇。 對於平時的練習,一個很厲害的 ACMer 說

DijkstraFloyd演算法

題目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for good eating but are not so adept at creating creamy del

dijkstraFloyd演算法的理解

演算法的適應範圍 Floyed  演算法: 弗洛伊德演算法是解決任意兩點間的最短路徑的一種演算法,可以正確處理無向圖或有向圖或負權(但不可存在負權迴路)的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。 Floyed演算法允許圖中有帶負權值邊,允許有迴路,但不允許有帶負

圖-最短路徑—Dijkstra演算法Floyd演算法

1.定義概覽 Dijkstra(迪傑斯特拉)演算法是典型的單源最短路徑演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。Dijkstra演算法是很有代表性的最短路徑演算法,演算法使用了廣度優先搜尋解決賦權有向圖或者無向圖的單源

Dijkstra演算法Floyd演算法對比分析

首先,Dijkstra演算法與Floyd演算法都是廣度優先搜尋的演算法。都可以用來求單源點到其他所有點的最短路徑。那麼這兩者的原理分別是怎樣?彼此又有什麼區別呢?求此有向圖中起點1到其他所有點的最短距離在本文中,我們以一個小小的包含3個節點的有向圖和鄰接矩陣Graph來進行說

圖的最短路徑-Dijkstra演算法Floyd演算法

Dijkstra演算法 單源點最短路徑問題 Dijkstra演算法主要用來解決單源點最短路徑問題。 給定帶權有向圖G=(V,E),其中每條邊的權是非負數。另外,還給定V中的一個頂點,稱為源。現在要計算從源到所有其他各頂點的最短路徑長度,這裡路徑的長度是指路徑上各邊權之和。這個問題

Java資料結構----圖--最短路徑解法Dijkstra演算法Floyd演算法

最短路徑—Dijkstra演算法和Floyd演算法 1、Dijkstra演算法 1.1、定義概覽 Dijkstra(迪傑斯特拉)演算法是典型的單源最短路徑演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。Di

圖論模型(Dijkstra演算法Floyd演算法

圖論模型 Dijkstra演算法 概念 Dijkstra演算法能求一個頂點到另一頂點最短路徑。它是由Dijkstra於1959年提出的。實際它能給出從起始點到其他所有頂點的最短路徑。(具體理論不在此贅述,如有需要請查閱相關文獻)1 帶權鄰接

兩種最短路徑(測地距離)的演算法——DijkstraFloyd

     從某頂點出發,沿圖的邊到達另一頂點所經過的路徑中,各邊上權值之和最小的一條路徑叫做最短路徑。解決最短路的問題有以下演算法,Dijkstra演算法,Bellman-Ford演算法,Floyd演算法和SPFA演算法等。 最短路徑問題是圖論研究中的一個經典演算法問題,旨

資料結構與演算法-最短路徑DijkstraFloy演算法

最短路徑問題一般分為兩種情況,單源最短路徑(即從一個點出發到其餘各點的最短路徑問題)和每對頂點之間的最短路徑問題。Dijkstra和Floy演算法相比之下我更喜歡Floy演算法,該演算法容易理解,思路簡潔。 兩種演算法解決最短路徑都是基於貪心的演算法,從區域性出發一點點擴充套件。 以一個

POJ - 2253(dijkstraFloyd變形)

題目連結:http://poj.org/problem?id=2253 題目意思:有n個石頭的座標,一隻青蛙想從第一個座標的石頭跳到第二的石頭上,問最短路徑時要跳最長的路長為多少?   思路:就是將dijkstra,floyd中的d[],map[]儲存的內容改為最短路中最長邊。 有點無語的是

廣度優先深度優先貪心法DijkstraA*演算法的總結

廣度優先總結 1.在各個方向上都有同樣的探索。 對於一個圖他的廣度優先遍歷的步驟:  1.利用佇列實現  2.從源節點開始依次按照寬度進佇列,然後彈出  3.每彈出一個節點,就把該節點所有沒有進過佇列的鄰接點放入佇列  4.直到佇列變空 frontier = Queu

最短路徑Dijkstar演算法Floyd演算法詳解(c語言版)

轉載請註明出處:http://blog.csdn.net/crescent__moon/article/details/16986765 先說說Dijkstra吧,這種演算法只能求單源最短路徑,那麼什麼是單源最短路徑呢?就是隻能求一個點到別的點最短路徑,而不能求所有點到其它

spfa、DijkstraFloyd演算法最短路演算法詳解

本文章為轉載,這裡找點哪裡找點湊齊的,這樣可以方便進行了解幾種演算法相同點和不同點 spfa部分轉自:http://blog.csdn.net/maxichu/article/details/45309463   spfa:適用範圍:給定的圖存在負權邊,這時類似Dijk

DijkstraPrim演算法 【含數學證明】

#ACM&演算法 不知是不是因為自己的抽象學習能力還是不夠強,之前在翻閱別人部落格學習這兩個演算法的時候,整個人一直處於懵逼狀態。 分析了一下,發現之前存在的部落格教程,大多趨向於方法講解,學完以後有知其然不知其所以然的感覺。另一部分部落格則偏向數學證明,語言嚴謹

最短路徑問題的DijkstraSPFA演算法總結

Dijkstra演算法: 解決帶非負權重圖的單元最短路徑問題。時間複雜度為O(V*V+E) 演算法精髓:維持一組節點集合S,從源節點到該集合中的點的最短路徑已被找到,演算法重複從剩餘的節點集V-S中選擇最短路徑估計最小的節點u,對u的所有連邊進行鬆弛操作。即對j=1~n,di

dijkstraprim演算法

package b; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Graph { pr

DijkstraFloyd,Bellman-Ford,SPFA演算法的比較

都是求最短路徑,但是有一些差別 Dijkstra演算法:是求不含負權圖的單源最短路徑的一種演算法,效率較高 Floyd演算法:相對於Dijkstra演算法,Floyd-Warshall演算法是可以找到所有頂點對之間的最短路徑的長度(多源,每一對頂點之間)。 Bellman-Ford演算法

牛客網 最短路 Floyd演算法 Dijkstra演算法 Java大數

 連結:https://www.nowcoder.com/questionTerminal/a29d0b5eb46b4b90bfa22aa98cf5ff17 來源:牛客網 最短路徑 熱度指數:2992 時間限制:1秒 空間限制:65536K 演算法知識視訊講解