Dijkstra 優先佇列 鄰接表優化

2021-07-23 22:49:46 字數 1074 閱讀 6123

為了學習這個優化啊,把dijkstra,和優先佇列,還有map,還有pair,還有vector,之前很散的知識又重現看了一遍

然後讀了好久的dalao下面這個**,現在算是懂了一些些了。

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

const int n=205;

const int inf=1<<30;

typedef pairpii;//相當於struct pii;後面可pii p1;pii p2;之類的

string src,ed;

int n,m;//點,邊

int dis[n];

struct edge//用結構體存放邊和權值

//建構函式

edge(int uu,int vv,int ww):u(uu),v(vv),w(ww){}

};mapm;//給的點是字串,map轉換成數字

vectorg[n];//vector陣列

void init()

cin>>src>>ed;//輸入最終要求的,起點和終點,編號就是m[src],m[ed]

for(int i=1;i<=m;i++)

}void dijkstra()}}

}int main()

edge(int uu,int vv,int ww):u(uu),v(vv),w(ww) {}

};vectorg[n];

void init()

cin>>src>>ed;

for(int i=1; i<=m; i++)

dis[i]=(i==src?0:inf);

}void dijkstra()

for(int i=0; idis[x]+w)}}

}int main()

{ int ttt;

cin>>ttt;

while(ttt--)

{init();

dijkstra();

cout<<(dis[ed]==inf?-1:dis[ed])<

Dijkstra 模板 鄰接表 優先佇列

時間複雜度 o n m logm include include include using namespace std define mp make pair const int n 100010,m 200010 const int inf 0x7fffffff int fr n nex n d...

堆(優先佇列)優化dijkstra 鄰接矩陣

上篇部落格大家學習了最短路的兩種基本演算法,忘了告訴大家,floyd可以完成有負權值的最短路,而dijkstra則不行。若要想要更優的進行負權值最短路,請期待我的spfa詳解。現在開始堆優化dijkstra的講解。其實只要理解了dijkstra的本質,這也就不難了,就是把查詢最小dis值的過程用堆實...

Dijkstra演算法實現類 提高,鄰接表 優先佇列

總覺得前點時間寫的dijkstra,有點繁瑣,還是用回鄰接表和優先佇列感覺舒服點。廢話就不多說了,原先那篇鄰接矩陣的dijkstra鏈結如下 這次改為優先佇列,則需要乙個vertex結構,記錄其序號及到起點的cost。每次push進去佇列之前,都重新整理其最新cost。並且加了些輔助變數,如判斷是否...