POJ 3259 SPFA判断负权回路
2012-07-28 22:33
253 查看
SPFA 是bellman-ford的一种优化
SPFA 用于求负权存在的最短路,判断是否有负权回路,只需判断松弛边的次数,如果大于N,就说明存在负权回路
SPFA 用于求负权存在的最短路,判断是否有负权回路,只需判断松弛边的次数,如果大于N,就说明存在负权回路
#include<stdio.h> #include<cstring> #include<vector> #include<iostream> #include<queue> #include<algorithm> #define N 5501 using namespace std; const int inf=0x7fffffff; int map ; int d ; bool inq ; int cnt ; int n,m,q; bool spfa(int s) { queue<int> q; int i; for(i=0;i<=n;i++) d[i]=inf; d[s]=0; memset(inq,0,sizeof(inq)); memset(cnt,0,sizeof(cnt)); q.push(s); inq[s]=true; cnt[s]++; while(!q.empty()) { int t=q.front(); q.pop(); inq[t]=false; for( i=1;i<=n;i++) { if(d[t]<inf&&map[t][i]<inf&&d[i]>d[t]+map[t][i]) { d[i]=d[t]+map[t][i]; cnt[i]++; if(cnt[i]>=n) return false; if(!inq[i]) { q.push(i); inq[i]=true; } } } } return true; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&q); int u,v,w; int i,j; for(i=1;i<=n;i++) for(j=1;j<=n;j++) map[i][j]=inf; for(i=0;i<m;i++) { scanf("%d%d%d",&u,&v,&w); if(map[u][v]>w) map[u][v]=map[v][u]=w; } for(i=0;i<q;i++) { scanf("%d%d%d",&u,&v,&w); map[u][v]=-w; } if(spfa(1)) printf("NO\n"); else printf("YES\n"); } return 0; }
相关文章推荐
- 最短路 SPFA 判断负环 静态邻接表(链式前向星) HDU 2544 最短路 POJ 3259 Wormholes
- F - Wormholes POJ - 3259--SPFA 算法判断负环是否存在
- poj&nbsp;3259spfa()判断是否存在负环
- POJ 3259 Wormholes (Bellman-Ford/SPFA 判断是否存在负权环)
- POJ 3259 Wormholes (判断负环,SPFA或Bellman-Ford都可)
- POJ 3259 Wormholes(判断负环&(Bellman-Ford|SPFA))
- poj 3259 worm-holes spfa判断负权回路
- POJ 3259 Wormholes (Bellman-Ford/SPFA 判断是否存在负权环)
- poj 3259 spfa判断回路。
- POJ 3259 Wormholes (Bellman-Ford/SPFA 判断是否存在负权环)
- Wormholes POJ 3259 SPFA 判断是否出现了负权值回路
- poj 3259 Wormholes spfa判断负环 解题报告
- 【POJ 3259】Wormholes (SPFA 判断负环)
- Poj 3259 Wormholes【SPFA判断负权回路】
- Poj 3259 Wormholes 负环判断 SPFA & BellmanFord
- poj 3259 Wormholes【spfa判断负环】
- POJ 3259 Wormholes (Bellman-Ford/SPFA 判断是否存在负权环)
- POJ 3259 Wormholes (最短路 SPFA 判断负环)
- POJ - 3259 Wormholes(判断负环, Bellman Ford,SPFA)
- (简单) POJ 3259 Wormholes,SPFA判断负环。