判断给定的有向图中是否存在负环。
利用 spfa 算法判断负环有两种方法:
1) spfa 的 dfs 形式,判断条件是存在一点在一条路径上出现多次。
2) spfa 的 bfs 形式,判断条件是存在一点入队次数大于总顶点数。
http://poj.org/problem?id=3259
在探索他的许多农场时,农夫约翰发现了许多令人惊奇的虫洞。一个虫洞是非常奇怪的,因为它是一条单向的路径,在你进入虫洞之前的一段时间把你送到它的目的地!FJ的每个农场包括N(1≤)N≤500)方便地编号为1.N, M(1≤)M(≤2500)路径,以及W(1≤)W≤200)虫洞。
由于FJ是一个狂热的时间旅行迷,他想做以下几件事:从某个领域开始,穿过一些路径和虫洞,然后在他最初离开之前回到起点。也许他能认识自己:)。
为了帮助FJ找出这是否可能,他会向你提供完整的地图F(1≤)F≤5)他的农场。任何路径都不会超过10,000秒的行程,而且没有虫洞能使FJ及时返回超过10,000秒。
输入
第1行:一个整数,F. F农场的描述如下。
每个场的第1行:三个空格分隔的整数:N, M,和W
第2行.。M+一个农场:三个空格分隔的数字(S, E, T)分别描述:双向路径S和E这需要T再过几秒钟。两个字段可能由多条路径连接。
线M+2.. M+ W+一个农场:三个空格分隔的数字(S, E, T)分别描述:从S到E这也会让旅行者回来T几秒钟。
输出量
第1行.。F*对于每个农场,如果FJ能够实现他的目标,输出“是”,否则输出“否”(不包括引号)。
样本输入
2
3 3 1
1 2 2
1 3 4
2 3 1
3 1 3
3 2 1
1 2 3
2 3 4
3 1 8
样本输出
NO
YES
BFS_SPFA版:
#include
#include
#include
#include
#include
#include
#include
#include
DFS_SPFA版:
#include
#include
#include
#include
#include
#include
#include
#include