思路:
做,原应考虑以每个点为源点判断有无负环,可能是后台数据弱的原因,只要判断第一个点就行了
#include <stdio.h>
#include <string.h>
#define inf 0x3f3f3f3f
#define M 505
#define MAX 6000
int next[MAX],head[M],ep;
struct edge
{
v,cost;
next;
}e[MAX];
//边的存储形式
void addedge(int cu,int cv,int
w)
{
cv;
w;
head[cu];
ep;
}
int spfa (int n)
{
inq[M],dis[M],cnt[M],queue[M];
1;i <= n;i ++)
dis[i] = inf;
inq[i] = 0;
cnt[i] = 0;
0;
1;
1;
-1,rear = 0;
queue[rear++] = 1;
!= rear)
front = (front+1)%(n+1);
== front
int u = queue[front];
inq[u] = 0;
for (int i = head[u];i != -1;i =
e[i].next)
{
if (dis[e[i].v] > dis[u] +
e[i].cost)
//松驰
{
dis[e[i].v] = dis[u] + e[i].cost;
if (!inq[e[i].v])
{
inq[e[i].v] = 1;
if (++cnt[e[i].v] >= n)