感谢书神的模板!!!
int spfa(int s,int n)//单源最短路(s为起点,n为节点总数) { int u; for (int i=0; i<=n; i++) dis[i]=INF; memset(vis,0,sizeof(vis)); queue<int> que; que.push(s); vis[s]=true; dis[s]=0; while (!que.empty()) { u=que.front(); que.pop(); vis[u]=false; for (int i=head[u]; i!=-1; i=edge[i].next) { int v=edge[i].v; int w=edge[i].w; if (dis[v]>dis[u]+w) { dis[v]=dis[u]+w; if (!vis[v]) { vis[v]=true; que.push(v); way[v]++; if(way[v]>n) return 0; } } } } return 1; } // PS:如果需要判负环,另外设置一个数组c记录每个点的进队列次数,大于总点数则有环,返回0;