首页 > 代码库 > POJ3259 Wormholes 【Bellmanford判断是否存在负回路】
POJ3259 Wormholes 【Bellmanford判断是否存在负回路】
很简单的bellmanford题目,这里比较详细:http://blog.csdn.net/lyy289065406/article/details/6645790
直接代码
#include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm> #include <cstring> #include <cmath> using namespace std; const int SIZE=11111; const int MAXLEN=1<<30; struct sss { int s,e,v; }ed[SIZE]; int N,M,WH; int dis[SIZE]; int ednum; bool Bellman() { for(int i=0;i<N-1;i++) { bool flag=false; for(int j=0;j<ednum;j++) { if(dis[ed[j].e]>dis[ed[j].s]+ed[j].v) { flag=true; dis[ed[j].e]=dis[ed[j].s]+ed[j].v; } } if(!flag) break; } for(int j=0;j<ednum;j++) { if(dis[ed[j].e]>dis[ed[j].s]+ed[j].v) { return true; } } return false; } int main() { #ifndef ONLINE_JUDGE freopen("G:/1.txt","r",stdin); freopen("G:/2.txt","w",stdout); #endif int f,u,v,w; cin>>f; while(f--) { ednum=0; cin>>N>>M>>WH; for(int i=0;i<SIZE;i++) { dis[i]=MAXLEN; } for(int i=0;i<M;i++) { cin>>u>>v>>w; ed[ednum].s=u; ed[ednum].e=v; ed[ednum++].v=v; ed[ednum].e=u; ed[ednum].s=v; ed[ednum++].v=w; } for(int i=0;i<WH;i++) { cin>>u>>v>>w; ed[ednum].s=u; ed[ednum].e=v; ed[ednum++].v=-w; } if(Bellman()) printf("YES\n"); else printf("NO\n"); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。