關於spfa 判斷負環

2021-07-28 11:40:15 字數 1399 閱讀 3005

判斷給定的有向圖中是否存在負環。

利用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幣金額數能否增加 貨幣的交換是可以重複多次的,如果有乙個環使得某種貨幣...