朴素的dijkstra模板
void dijkstra(int n,int dist[],EDGE edges[],int pre[],int src,int dest) { int _min,u,v,w; bool visit[maxn]={0}; for (int i=1;i<=n;i++) { dist[i]=OO; } dist[src]=0; for (int loop=1; loop<=n; loop++) { u=0; _min=OO; for (int i=1; i<=n; i++) { if (!visit[i]&&dist[i]<_min) { _min=dist[i]; u=i; } } if (u==0) return; visit[u]=true; if (u==dest) return; for (int i=head[u];i!=-1;i=edges[i].next) { v=edges[i].to; w=edges[i].w; if (!visit[v]&&dist[u]+w<dist[v]) { dist[v]=dist[u]+w; pre[v]=u; } } } }