题目描述:
给定一个有向图,图中边的权重有正有负,设图中存在若干负环,设计算法找到一个负环。
思路描述:
利用bellman_ford的方法先判断有没有环,如果有环,保存这条能relax的边,然后通过他的前驱点往前遍历,并将这些边保存到一个数组里,在过程中先判断是否出现了此点,如果出现说明找到环,这个点以及后面的点都是这个环中的点,否则继续加入数组中。
算法实现:
bool linkedDgraph1::BellmanFord(int s,int *res)//起始点,保存环中的点的数组
{
int * d = new int[verticeNumber];
int k1 = 0,k2=0,count=1;
bool exist = false;
for (int i = 0; i < verticeNumber+1; i++)//初始化表示
d[i] = 1000000;
for (int i = 1; i < verticeNumber; i++)
{
for (int j = 0; j < verticeNumber; j++)
{
int u = point[j];
graphNode<int>* p = Adj[u].first();
while (p != NULL)
{
int v = p->element;
if (d[v] > d[u] + getWeight(u, v))//relax操作
{
d[v] = d[u] + getW