int path[100005]; int used[100005]; int d[100005]; vector<int> G[100005]; int s,n; void dijstra() { for(int i=0;i<n;i++) { path[i]=-1; used[i]=0; d[i]=100000000; } d[s]=0; while(1) { int v=-1; for(int u=0;u<n;u++) { if(used[u]==0 && ((v==-1)||d[u]<d[v])) { v=u; } } if(v==-1) break; used[v]=1; for(int i=0;i<G[v].size();i++) { int u=G[v][i]; if(d[v]+1<d[u]) { d[u]=d[v]+1; path[u]=v; } } } }
const int MAXN=1010; #define typec int const typec INF=0x3f3f3f3f;//防止后面溢出,这个不能太大 bool vis[MAXN]; int pre[MAXN]; void Dijkstra(typec cost[][MAXN],typec lowcost[],int n,int beg) { for(int i=0; i<n; i++) { lowcost[i]=INF; vis[i]=false; pre[i]=-1; } lowcost[beg]=0; for(int j=0; j<n; j++) { int k=-1; int Min=INF; for(int i=0; i<n; i++) if(!vis[i]&&lowcost[i]<Min) { Min=lowcost[i]; k=i; } if(k==-1)break; vis[k]=true; for(int i=0; i<n; i++) if(!vis[i]&&lowcost[k]+cost[k][i]<lowcost[i]) { lowcost[i]=lowcost[k]+cost[k][i]; pre[i]=k; } } }