const int INF = 0xfffffff; const int M = 1005; Graph<M,M*M> g; int Dis[M]; struct Node{ Node(){} Node(int Len, int Ind):len(Len),ind(Ind){} int len,ind; bool operator<(const Node& node) const{ return len > node.len; } }; void Dijkstra(int s, int n) { fill(Dis,Dis+M,INF); priority_queue<Node> Q; Dis[s] = 0; struct Node cur; Q.push(Node(0,s)); while(!Q.empty()) { cur = Q.top(); Q.pop(); if(cur.len != Dis[ cur.ind ]) continue; for(int i = g.H[ cur.ind ]; i != -1; i = g.Next[i]) { if(Dis[ g.Num[i] ] == INF || Dis[ cur.ind ] + g.Len[i] < Dis[ g.Num[i] ]) { Dis[ g.Num[i] ] = Dis[ cur.ind ] + g.Len[i]; Q.push(Node(Dis[ g.Num[i] ],g.Num[i])); } } } } 须加 邻接表模板,头文件queue.h,宏定义#define CLR(arr,v) memset(arr,v,sizeof(arr))