Uva 558Wormholes

来源:互联网 发布:iphone桌面软件管理 编辑:程序博客网 时间:2024/05/21 12:45
这道题是要判断图中是否存在负环。。。用BF算法。。从0开始松弛

存在负环,说明经过n-1次的松弛之后,还可以继续松弛。

BF算法

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm> using namespace std;#define inf 99999999const int maxn=2*2000; int u[maxn],v[maxn],w[maxn];int d[maxn];int n,m;int BF(int p){     for(int i=0;i<n;i++)     d[i]=inf;     d[p]=0;    for(int i=1;i<n;i++)    {        for(int j=0;j<m;j++)        {            int x=u[j],y=v[j];            if(d[x]+w[j]<d[y])            d[y]=d[x]+w[j];        }    }     for(int i=0;i<m;i++)    {        int x=u[i],y=v[i];         if(d[x]+w[i]<d[y])        return 1;    }    return 0;} int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%d %d",&n,&m);        for(int i=0;i<m;i++)        scanf("%d %d %d",&u[i],&v[i],&w[i]);    if(BF(0))    {        printf("possible\n");    }    else    printf("not possible\n");}return 0;}

dfs算法

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>const int maxn=2*2000;#define inf 999999999struct node{   int u;   int w;   int next;}V[maxn];int tol;int d[maxn],f[maxn];int head[maxn];void init(){    tol=0;    memset(head,-1,sizeof(head));}void add(int u,int v,int w){    V[tol].u=v;    V[tol].w=w;    V[tol].next=head[u];    head[u]=tol++;}int dfs_(int u){    f[u]=1;    for(int i=head[u];i!=-1;i=V[i].next)    {        int v=V[i].u;        int w=V[i].w;        if(d[u]+w<d[v])        {        d[v]=d[u]+w;        if(!f[v])        {        if(dfs_(v))        return 1;        }        else          return 1;        }    }    f[u]=0;    return 0;}int main(){    int t,n,m;    scanf("%d",&t);    while(t--)    {        scanf("%d %d",&n,&m);        for(int i=0;i<=n;i++)        d[i]=inf;        init();        memset(f,0,sizeof(f));        int a,b,c;        while(m--)        {            scanf("%d %d %d",&a,&b,&c);            add(a,b,c);        }        d[0]=0;        if(dfs_(0))        {            printf("possible\n");        }        else        printf("not possible\n");    }    return 0;} 

 

0 0
原创粉丝点击