判斷給定的有向圖中是否存在負環。
利用spfa
演算法判斷負環有兩種方法: 1
)spfa
的dfs
形式,判斷條件是存在一點在一條路徑上出現多次。 2
)spfa
的bfs
形式,判斷條件是存在一點入隊次數大於總頂點數。
**如下: 法
1(spfa
的dfs
形式):
#include
#include
#include
using namespace std;
const int oo = 1 << 30;
const int maxn = 1010;
struct edge edge[2010];
int prev[maxn], p[maxn], d[maxn];
bool vis[maxn], flag;
int tot;
void addedge(int u, int v, int t)
void spfa(int u)
else }
} }int main()
memset(vis, false, sizeof(vis));
fill(d, d + n, oo);
d[0] = 0;
flag = false;
spfa(0);
if (flag) printf("possible\n");
else printf("not possible\n"); }
return 0; }
法2(spfa
的bfs
形式):
#include
#include
#include
#include
using namespace std;
const int oo = 1 << 30;
const int maxn = 1010;
struct edge edge[2010];
int prev[maxn], p[maxn], d[maxn], in[maxn];
bool vis[maxn];
int tot;
queueq;
void addedge(int u, int v, int t)
bool spfa(int n) }
}vis[u] = false;
q.pop(); }
return false; }
int main()
if (spfa(n)) printf("possible\n");
else printf("not possible\n"); }
return 0; }
SPFA判斷負環
說明一下,這個例題用下面的方法是過不了的,只能過掉25分因為資料加強了,而我不會寫bfs版spfa判負環 但是我覺得會dfs版的就行了,反正對於隨機資料dfs版的絕對吊打bfs版的 只不過這道題的資料不是隨機的,是有人惡意新增的 我們利用dfs強行進行鬆弛操作 我感覺已經不能叫他spfa了 如果在一...
P3385 模板 負環 spfa判斷負環
p3385 模板 負環 暴力列舉 spfa bellman ford 奇怪的貪心 超神搜尋 尋找乙個從頂點1所能到達的負環,負環定義為 乙個邊權之和為負的環。輸入格式 第一行乙個正整數t表示資料組數,對於每組資料 第一行兩個正整數n m,表示圖有n個頂點,m條邊 接下來m行,每行三個整數a b w,...
最短路專題 spfa判斷負環
題目大意 有多種匯幣,匯幣之間可以交換,這需要手續費,當你用100a幣交換b幣時,a到b的匯率是29.75,手續費是0.39,那麼你可以得到 100 0.39 29.75 2963.3975 b幣。問s幣的金額經過交換最終得到的s幣金額數能否增加 貨幣的交換是可以重複多次的,如果有乙個環使得某種貨幣...