1. 程式人生 > >最短路 (Floyd 最短路)

最短路 (Floyd 最短路)

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t-shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?
 

Input

輸入包括多組資料。每組資料第一行是兩個整數N、M(N<=100,M<=10000),N表示成都的大街上有幾個路口,標號為1的路口是商店所在地,標號為N的路口是賽場所在地,M則表示在成都有幾條路。N=M=0表示輸入結束。接下來M行,每行包括3個整數A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A與路口B之間有一條路,我們的工作人員需要C分鐘的時間走過這條路。
輸入保證至少存在1條商店到賽場的路線。

Output

對於每組輸入,輸出一行,表示工作人員從商店走到賽場的最短時間

Sample Input

2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0

Sample Output

3
2

思路:

     求最短路,Floyd,Dijkstra都行。看樣例是雙向的。

程式碼:

#include<stdio.h>
int inf=99999999;
int main()
{
	int e[110][110],n,m,a,b,c,i,j,k;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		if(n==0&&m==0)
			break;
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
			{
				if(i==j)
					e[i][j]=0;
				else
					e[i][j]=inf;
			}
		while(m--)
		{
			scanf("%d%d%d",&a,&b,&c);
				e[a][b]=c;
                                e[b][a]=c;
		}
		for(k=1;k<=n;k++)
			for(i=1;i<=n;i++)
				for(j=1;j<=n;j++)
				{
					if(e[i][j]>e[i][k]+e[k][j])
					{
						e[i][j]=e[i][k]+e[k][j];
					}
				}
		printf("%d\n",e[1][n]);
	}
	return 0;
}

相關推薦

短路 Floyd 短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t-shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?   Input 輸入包括多組資料。每組資料第一行是兩個整數N、

POJ - 2253 FroggerFloyd短路+預處理

最短路 pri str 之間 col ace blank scanf oid 題目鏈接:http://poj.org/problem?id=2253 題意:青蛙要從點1到點2,給出各點的坐標,如果點A到點B可以通過A->C,C->B,A到B的距離可以用A-&g

Audiophobia UVA - 10048 Floyd短路

題目大意: 給出一張圖,求任意兩點之間最短路的最長邊。 思路: 裸弗洛伊德使用遞推關係dis[i][j]=min(dis[i][j],max(dis[i][k],dis[k][j]));完事了 AC程式碼: #include<cstdio> #include&l

多源短路floyd演算法

Floyd適用無向圖和有向圖,不適用於帶負權的圖   #include<stdio.h> #include<algorithm> #include<iostream> using namespace std; int n , m; int

短路Floyd-hdu1317

題目連結:https://vjudge.net/problem/HDU-1317 題目描述:   題意:玩家起始有100個能量點,剛開始在起始房間中,每個房間外有一條單向的路徑通往其他房間(一個房間可能通往多個房間),具體通往哪些房間可以檢視房間門口的房間列表。每次玩家進入一個房間,他的能量值會更新成

HDU2544短路Floyd演算法

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 86733    Accepted Submission

短路Floyd演算法

最短路徑問題使用Floyd演算法:(結點編號從1-n) 使用鄰接矩陣來儲存原圖,那麼此時鄰接矩陣中edge[i][j]的值即表示從結點i和結點j,中間不經過任何結點時距離的最小值(若他們之間有多條邊,取最小權值儲存在鄰接矩陣,也可能是去無窮或者-1,這樣來表示不可達);在

hdu2544 短路floyd 解題報告

Problem Description 在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t-shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎? Input

hdu2544 短路 floyd

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 47151    Accepted Submis

poj2240Floyd短路的變種---長路 Arbitrage

Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12761 Accepted: 5392 Description Arbitrage is the use of discrep

短路演算法Floyd、Dijkstra

         本節學習指定一個點(源點)到其餘各個頂點的最短路徑,也叫做“單源最短路徑”。例如下圖中的1號頂點到2、3、4、5、6號頂點的最短路徑。        與Floyd演算法一樣,這裡仍然使用二維陣列g來儲存頂點之間邊的關係,初始值如下:        我們還需要用一個一維陣列dis來儲存1號頂點

hdu 2544 短路SPFA算法

oid rom 表示 max 兩個 amp 取消 get pid 本題鏈接:點擊打開鏈接 本題大意: 首先輸入一個n,m。代表有n個點。m條邊。然後輸入m條邊,每條邊輸入兩個點及邊權。1為起點,n為終點。輸入兩個零表示結束。 解題思路:

#41 短路分治+線性基

n) include getchar() 後綴 比較 getc line 把他 out   考慮異或最短路應該怎麽求。那麽這是個WC原題,dfs一遍找到所有有用的環丟進線性基即可,因為每一個環的權值都是可以取到且不對其他部分產生影響的。   現在給了一棵樹,不妨就把他看做原

單源短路——Bellman-Ford演算法超詳細

今天看了一下午的白書的Bellman-Ford演算法,由於能力有限,可能理解不到位。。。。 感覺就是遍歷所有邊更新點,如果有更新的點,繼續遍歷所有邊,直到沒有點更新就退出. #include <iostream> #include <stdio.h> #inc

Dijkstra演算法,求短路dp 動態規劃

•迪傑斯特拉(Dijkstra)演算法思想 按路徑長度遞增次序產生最短路徑演算法: 把V分成兩組: (1)S:已求出最短路徑的頂點的集合 (2)V-S=T:尚未確定最短路徑的頂點集合 將T中頂點按最短路徑遞增的次序加入到S中, 保證:(1)從源點V0到S中各

短路第二短路徑

第二最短路徑 有句古話叫“不破不立”,這個思想跟次短路也就是第二最短路的思想一樣。 演算法思想:計算原圖的最短路,並儲存路徑。一一破壞最短路中的每一條邊,重新計算最短路,並排序。最小的那個就是第二最短路。 1.用dijkstra計算u->v的最短路徑,儲存路徑上的每條

平面圖的小割轉短路點非常多

/************************************************************** User: error408 Language: C/C++ School: SSDUT Saying: Do one thing at a time

[圖論]floyed短路災後重建

之前 兩個 pst 什麽 C4D sin 短路徑 string 重建 災後重建 Description B地區在地震過後,所有村莊都造成了一定的損毀,而這場地震卻沒對公路造成什麽影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連接著兩個

POJ2594:Treasure ExplorationFloyd + 小路徑覆蓋

body bsp sent space p s form desc after floyd Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 9794

小生成樹prime演算法、kruskal演算法短路徑演算法floyd、dijkstra

簡介: 帶權圖分為有向和無向,無向圖的最短路徑又叫做最小生成樹,有prime演算法和kruskal演算法;有向圖的最短路徑演算法有dijkstra演算法和floyd演算法。   生成樹