C spfa和dijkstra演算法模板

2021-07-25 23:58:19 字數 2102 閱讀 1934

最短路模板題目。spfa 或 用堆優化的迪傑斯特拉演算法均可實現。

成都浣花溪公園是一座有著詩歌文化氣息的公園,它以杜甫草堂的歷史文化內涵為背景,運用現代園林和建築設計的前沿理論,以自然雅緻的景觀和建築凸現川西文化醇厚的歷史底蘊,是一座集將自然景觀和城市景觀、古典園林和現代建築藝術有機結合的城市公園。

週末,mr.zeng和他兒子在浣花溪公園「詩歌大道」上欣賞詩歌,剛詩興正濃,mr.zeng忽然想起汽車的車門沒鎖,於是他們要在最快的時間內走出公園趕到公園門口停車場。我們把公園的景點用數字標號(從1 到 n-1),在兩個景點中之間會有道路連線,並且mr.zeng和他兒子都是素質很高的人,他們不會穿越公園的草坪,只會沿著公園的小路行走。mr.zeng想知道從他們當前所處的位置 s 到公園的出口(標號固定為 n)所需要的最短時間。你能幫幫他嗎?

輸入檔案的第一行有3 個正整數:n、k、t 並且用空格隔開,分別表示公園景點數目、公園小路條數,以及他們當前所處的景點編號。

接下來 k 行,每行三個整數,表示小路連線的兩個景點的編號以及走過這條小路所需要的時間。

乙個整數,表示他們走出公園所需要的最短時間。

輸入

3 2 1 

1 2 3 

2 3 4

輸出

7

【資料範圍】

對於 60% 的資料,保證 n<=1000,k<=10000。

對於 100% 的資料,保證 n<=10000,k<=100000。

對於 100% 的資料,保證結果在 231 內。

一 spfa+vector實現

#include#include#include#include#include#include#include#include#include    tmp=p.front();    p.pop();  

using namespace std;

struct node

; vector bian[200001]; //儲存邊,由於一般情況下eint dist[10001];

bool exist[10001]; //exist[i]=true表示點i已經在佇列中

int n,k,t; //點數、變數、當前位置

void init() //資料輸入,建立鄰接表

}int main() //主程式}}

p.pop(); //彈出隊首節點

} printf("%d",dist[n]); //輸出到終點的最短路

return 0;

}

二 純dijkstra

#include#include#include#include#include#include#include#include#includeusing namespace std;

struct node;

node heap[10010];

int n,m,k,x,y,i,j,tot,cnt,z,p,s;

int next[200100],w[200100],v[200100],pl[10010],first[10010],dis[10010];

void addedge(int x,int y,int z)

void down(int x)

}int main()

memset(dis,127,sizeof(dis));

dis[s]=0;

cnt=0;

for(i=1;i<=n;i++)

heap[pl[s]].w=0;

up(pl[s]);

for(i=1;i<=n;i++)

edge[200010];

inline void create(int x,int y,int z)

void read(void)

}int dijkstra(int s,int t)

p=edge[p].next;

} }

return dis[t];

}int main()

{ read();

cout<

最短路 Floyd演算法和Dijkstra演算法

兩者在負權問題上不是很好,最好只處理正值,dijkstra演算法對負權毫無辦法,但是floyd演算法不能處理出現負環的東西。dijkstra演算法的話,為了方便,我認為從i到i點不可達 百部百科解釋挺好,那個堆優化挺好的 floyd演算法百部百科也不錯,都是老演算法了,哪都有資料 這位筒子的寫得很好...

dijkstra和dijkstra堆優化模板

之前qaq一直沒有準備堆優化模板,本例以pat a1003為例,整理dijkstra和dijkstra堆優化模板 我們可以發現該篇幅找最小值部分是使用量乙個for迴圈 include include using namespace std int n,m,c1,c2 int edge 510 510...

ACM之路 5 最短路演算法 Dijkstra演算法

簡介 dijkstra演算法是一種單源路徑演算法。時間複雜度為 o n 2 比floyd演算法 o n 3 快很多。當然,dijkstra演算法可以用堆優化後,演算法複雜度成了 o m n logn 複雜度更底了。本文只講解dijkstra的簡單演算法。問題 給予n個城市和m條道路,求從城市1到城市...