思路:用bellman-ford 判断有没有负权回路,如果有他就能看到自己。
不过,我认为应该判断每个点有没有负权回路,而不仅仅只判断第一个点就行了(如果某位大牛路过看到,觉得理解不对 希望多多指教)
代码没优化
#include <stdio.h>
#define M 505
#define N 52051
#define inf 999999
struct Edge
{
v1,v2;
} edge[N];
int num;
int bellman(int n)
{
i,j,k,dis[M];
<= n; k
++)
//这里本是要判断所有点的
for (i = 1; i <= n; i ++)
dis[i] = inf;
dis[k] = 0;
for (i = 1; i < n; i ++)
{
for (j = 1; j <= num; j ++)
if (dis[edge[j].v2] >
dis[edge[j].v1]+edge[j].w)
dis[edge[j].v2] = dis[edge[j].v1]+edge[j].w;
}
for (j = 1; j <= num; j ++)
if (dis[edge[j].v2] >
dis[edge[j].v1]+edge[j].w)
return 0;
1;
}
int main ()
{
t,n,m,v1,v2,w,time,k;
("%d",&t);
--)
scanf
("%d%d%d",&n,&m,&w);
k = 1;
while (m --)
{
scanf
("%d%d%d",&v1,&v2,&time);
edge[k].v1 = v1;
edge[k].v2 = v2;
edge[k].w = time;