dijkstra最短路徑

2021-06-21 05:41:52 字數 1350 閱讀 1925

hehe和xixi在乙個地方玩遊戲,xixi把n-1件禮物(hehe以前送給xixi的)分別藏在了另外n-1個地方,

這些地方都能互相到達,且所有的邊都是有方向的。

現在hehe要做的事就是去那些地方找回那n-1件禮物給xixi;

由於每一件禮物都有特殊的意義,所以xixi要求hehe每找到一件禮物,就必須馬上返回xixi所在的位置,對她說一句當年送她這件禮物的時候所說的話。

由於每走乙個單位長度hehe需要花費1分鐘,xixi還要求hehe在最快的時間內把這些禮物帶回來交給她,你能幫助hehe麼?

輸入測試資料有t組,每組測試資料開始為兩個整數n和m,1 <= n,m <= 100000。

n代表所有的位置,m代表這些位置之間的長度

然後是m行,每行有三個數,u,v,w,即位置u和位置v之間有一條單向的邊,距離為w;

你可以假設位置的編號是從1到n,xixi的位置始終都在1;

輸出對於每組測試資料, 用一行輸出hehe所花費的最短時間。

比如t為2,就表示有兩組輸入資料。

答題說明

輸入樣例

3 31 2 4

2 3 5

3 1 6

輸出樣例

#include #include #include #include #include #include #include using namespace std;

const int w_inf=101;

const int m_max=100000;

int vertexes_num;

int edges_num;

int d_go[m_max],d_back[m_max];

typedef struct gnode //圖節點

gnode;

gnode *vertex_go,*vertex_back;

class qnode//dijkstra演算法頂點集q的節點

friend bool operator<(qnode a,qnode b)

};void dijkstra(int s,int d,int vertexes_num,gnode* vertex)}}

}void create_adj_list(int x,int y,int c,gnode* node)//建立鄰接表

void delete_adj_list(gnode& node)//刪除鄰接表

}int main()

dijkstra(0,d_go,vertexes_num,vertex_go);

dijkstra(0,d_back,vertexes_num,vertex_back);

int output=0;

for(int i=0;i

Dijkstra 最短路徑

dijkstra 最短路徑 針對有向圖,不支援負權值 圖的相鄰矩陣表示方法,還要用到最小值堆 include include define unvisited 0 define visited 1 define infinite 9999 設定最大值 define n 5 定義圖的頂點數 using...

最短路徑 Dijkstra

首先,提出兩點 一 如果把不帶權圖上的所有邊的權值均定義為1,則該不帶權圖可以歸結為帶權圖 二 如果把無向圖中的每一條邊 vi,vj 都定義為弧和弧,則該無向圖可以歸結為有向圖。因此不失一般性,我們只用看有向帶權圖怎麼求解最短路徑問題就ok。帶權圖中,從乙個結點到另個一結點存在著多條路徑,稱每一條路...

Dijkstra最短路徑

演算法筆記 dijkstra演算法解決的是單源最短路問題,即給定圖g v,e 和起點s 起點又稱為源點 求從起點s到達其它頂點的最短距離 dijkstra演算法的策略是 設定集合s存放已被訪問的頂點,然後執行n次下面的兩個步驟 n為頂點個數 1.每次從集合v s中選擇與起點s的最短距離最小的乙個頂點...