為了學習這個優化啊,把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。並且加了些輔助變數,如判斷是否...