spfa模板
1 int SPFA(Graph &g, int s, int dist[]) 2 { 3 int inQueue[MAX]={0}; 4 int num[MAX]={0}; //记录入队次数 5 int i, j; 6 for (i = 0; i < g.n; i++)//初始化最大值 7 dist[i] = MAXINT; 8 int q[MAX*MAX], front=0, back=0; 9 q[back++] = s;//源点入队 10 dist[s] = 0;//到自身距离为 0 11 inQueue[s] = 1;//检查是否入队 12 num[s]++;//入队次数加 1 13 while (front!=back) 14 { 15 int u = q[front++], v;//u 出队 16 inQueue[u] = 0;//标记不在队列中 17 for (v=0; v<g.n; v++) 18 { 19 if (g.data[u][v]!=MAXINT) //u 与 v 直接邻接 20 { 21 if (dist[u] + g.data[u][v] < dist[v]) 22 { 23 dist[v] = dist[u] + g.data[u][v]; 24 if (!inQueue[v])//不再队列中 25 { 26 q[back++] = v;//v 入队 27 num[v]++;//v 次数加 1 28 if (num[v]>=g.n)//负权回路 29 return 0; 30 inQueue[v] = 1;//标记 v 入队 31 } 32 } 33 } 34 } 35 } 36 return 1; 37 }
模板题:https://www.acwing.com/problem/content/854/

浙公网安备 33010602011771号