1. 程式人生 > >圖論——最短路

圖論——最短路

1、floyed

使用鄰接矩陣,三重迴圈列舉所有邊,然後做三角形迭代。時間複雜度為O(n^2).太簡單就不給程式碼了。

2、迪傑斯特拉(英文打不來)

迪傑斯特拉其實是貪心演算法,每次都選取距離最近的點,進行三角形迭代,從而保證所得路徑最短。迪傑斯特拉是求單源點到其他所有點的最短路。需要注意的是迪傑斯特拉不允許出現負權。時間複雜度為O(n^2).

程式碼如下:

memset(dis,10,sizeof(dis));
	memset(flag,false,sizeof(flag));
	for(int i=1;i<=t;i++)dis[i]=a[i][ts];
	dis[ts]=0;
	flag[
ts]=true; for(int i=1;i<=t;i++) { int minn=1000000000,k=0; for(int j=1;j<=t;j++) { if(dis[j]<minn&&!flag[j]) { minn=dis[j]; k=j; } } if(k==0)break; flag[k]=true; for(int j=1;j<=t;j++) { if(dis[k]+a[k][j]<dis[j]&&!flag[j]) { dis[j]=dis[
k]+a[k][j]; } } }
3、bellman-ford

之前的迪傑斯特拉是基於點的迭代,bellman-ford則是基於邊的迭代。每次都列舉所有邊進行三角形迭代,時間複雜度為O(n*m)。注意bellman-ford可以用來判斷負權迴路。

程式碼如下:

void bell(int st)
{
	memset(d,10,sizeof(d));
	d[st]=0;
	for(int k=1;k<=t;k++)
	{
		bool flag=false;
		for(int j=1;j<=t;j++)
		{
			if(d[a[j].st]+a[j].v<d[
a[j].en]) { d[a[j].en]=d[a[j].st]+a[j].v; flag=true; } } if(!flag)return; } }

相關推薦

洛谷P1027 Car的旅行路線 計算幾何 短路

name ani 但是 ret sqrt bsp include struct == 題意 求某城到某城的最小花費 一個城中有四個機場,一個城中的機場相互可達,用公路到達,但是不同城的公路的單位路程的費不同,兩個不同城的機場(我不知道相同城可不可以)可以通過機場到達,且飛機

換教室 vijos2005 NOIP2016 D1T3 期望DP 短路(霧)

clas turn void spa 教室 for 1.0 include () 直接上代碼吧 Debug一下午 心累。。今天讓我對memset有了完整的認識 #include<cstdio> #include<cstring> #incl

——短路

src view data 最短 ora 服務 which must open RT 找工就業 Bessie is running out of money and is searching for jobs. Farmer John knows this and want

[專題-]短路

輸出 用途 鄰接表 currency tro htm hdu 3416 arr 例題 kuangbin最短路專題鏈接:https://cn.vjudge.net/contest/231324 專題題解 寫題解的就是比較好的題了 1 / 3 POJ 2387 Til t

-短路】【P3393】逃離僵屍島

hint eight pro urn ref wid rip tin #define 傳送門 Description 小a住的國家被僵屍侵略了!小a打算逃離到該國唯一的國際空港逃出這個國家。 該國有N個城市,城市之間有道路相連。一共有M條雙向道路。保證沒有自環和重邊。

[][短路]ROADS

scrip param 能夠 heat should spec push inf nbsp Description N cities named with numbers 1 ... N are connected with one-way roads. Each roa

短路——spfa

print 操作 標記 pen play hide man mage 隊列 今天開始圖論的最短路的最後復習,今天自己手打spfa雖然看了一眼書,但是也算是自己打出來的,畢竟很久沒打了,而且還是一遍a代碼下來15min左右就搞完了,成就感++。所以呢來篇博客記錄一下。 香甜

短路 SPFA + 前向星存邊

SPFA模板題 介紹 ==== SPFA SPFA已死 SPFA是基於Bellman - Ford的一種賊快的演算法, 用佇列來實現。 通常用於求含負權邊的單源最短路徑,以及判負權環。 SPFA 最壞情況下複雜度和樸素 Bellman-Ford 相同,為

-短路-迪傑斯特拉演算法

圖論–最短路–Dijkstra(迪傑斯特拉)演算法 及 堆優化 1.陣列: #include<cstdio> #include<cstring> const int maxn=100; int map[maxn][maxn]; int d

-短路問題

最短路問題總結 floyed演算法 可以求任意兩點的最短路,適合負邊權,也可以用於檢測任意兩點是否連通。演算法效率O(N^3) 核心程式碼: //d[i][j]表示節點i到j的最短路 for(int k=1;k<=n;k++) fo

(複習)--短路--Dijkstra演算法

定義:迪傑斯特拉演算法是由荷蘭電腦科學家狄克斯特拉於1959 年提出的,因此又叫狄克斯特拉演算法。是從一個頂點到其餘各頂點的最短路徑演算法,解決的是有向圖中最短路徑問題。迪傑斯特拉演算法主要特點是以起始

-短路-dijkstra演算法

dijkstra演算法的思想是每次找出目前最短路徑的點,然後再找下一個最短的點。可以利用堆優化降低複雜度。 缺點:不能處理負邊。 #include <iostream> #includ

——短路

1、floyed 使用鄰接矩陣,三重迴圈列舉所有邊,然後做三角形迭代。時間複雜度為O(n^2).太簡單就不給程式碼了。 2、迪傑斯特拉(英文打不來) 迪傑斯特拉其實是貪心演算法,每次都選取距離最近的點,進行三角形迭代,從而保證所得路徑最短。迪傑斯特拉是求單源點到其他所有點的

短路spfa--poj3013Big chrismas tree

這道題可以轉換成 以1為源點求最短路 答案就是點權*dis spfa 用的bfs 直接粘程式碼好了 #include<iostream> #include<cstdio

D1短路專題

一個 經典 sstream tps mina oid cst 圖片 void 第一題:poj3660 其實是Floyed算法的拓展:Floyd-Wareshall。初始時,若兩頭牛關系確定則fij = 1。 對於一頭牛若確定的關系=n-1,這說明這頭牛的排名是確定的。 通過

[]短路問題 dijkstra演算法

今天研究的是圖論中的一類基礎問題:最短路問題 最短路問題是圖論中最基礎的問題,在程式設計競賽試題中也經常出現。最短路是給定兩個定點,在以這兩個點為起點和終點的路徑中,邊的權值和最小的路徑。如果把權值當作距離,考慮最短距離的話就很容易理解了。智力遊戲中的求解最少步數問題也可

---短路(記錄路徑)

設計任務                             校園導遊諮詢  問題描述: 設計一個校園導遊程式,為來訪的客人提供各種資訊查詢服務。 基本要求: ⑴設計華東交通大學的校園平面圖,所含景點不少於10個。以圖         中頂點表示校內各景點。 ⑵存放景

短路總結

~~寫在前面:圖論題的除錯真感人~~ 讓我們進入正題 ##最短路是啥 emmm 顧名思義最短路就是求一個點到另外一個點的最小距離 一般來說最短路分為:單源最短路和多源最短路 單源最短路就是求一個源點到另外多個點的最短距離 而多源最短路就是求多個點到其他點的最短距離 演算法一般有: * floyd(多源 O(

--小生成樹和短路1

圖論的兩個經典問題。 1、先介紹樹的概念: 樹的概念挺簡單的,一個祖先,一個兒子只能有一個父親節點,不能形成環。n個節點只能有n-1條邊,要不然會形成環。(易得知) 2、再來講講我用來存圖的兩種方式:

-小生成樹

而是 最小 動態 課程 最小生成樹 圖論 重疊 其中 每次 今天聽了CLRS的第二作者講的課程,關於最小生成樹的算法。 其實就是先模擬一下小樣例(不是單純模擬,而是發現其中的規律,要思考) 然後發現最優子結構-如果(u,v)是一條唯一連接兩點的邊,那麽將原圖拆分為兩塊(一塊