题意很明显:判断是否有负权回路。
bellman_ford的算法实现过程:
首先明确一点 迄今 还不知道 判断完是否有负权后 怎么计算最短路。——有负权 没有最短路。无负权,dis中的最小距离即是所解
判断负权的过程:定义一个一维数组,存放的是每个点的最小距离(到源点的最小距离)(每次更新与其相连的两个点,最终存放的是该点在整个图中的最小距离),更新每个点的最小距离,如果某个点能更新n次说明存在负权。但是如果在某次缩边的过程中,没有可以缩边的点,也即说明已经找到最短距离,则不用缩边了,一定没有负权。
算法成立的原理:如果两点之间存在最短距离,则长度最大为n-1,如果,某个点经过了n次,说明存在负权。
#include<iostream>
using namespace std;
struct info
{
int s,e,w;
}map[5500];
int dis[505];
int N,M,W,len;
bool bellman_ford()
{
int i,j,k;int flag=1;
for (i=0;i<N-1;i++)
{
for (j=0;j<len;j++)
{
if (dis[map[j].s]>dis[map[j].e]+map[j].w)
{
dis[map[j].s]=dis[map[j].e]+map[j].w;
flag=2;
}
}
if (flag==1)
{
break;
}
}
for (j=0;j<len;j++)
{
if (dis[map[j].s]>dis[map[j].e]+map[j].w)
{
return true;
}
}
return false;
}
int main()
{
int n;
cin>>n;
while (n--)
{
int i,s,e,t;len=0;
cin>>N>>M>>W;
for (i=0;i<M;i++)
{
cin>>s>>e>>t;
map[len].s=s;
map[len].e=e;
map[len++].w=t;
map[len].s=e;
map[len].e=s;
map[len++].w=t;
}
for (i=0;i<W;i++)
{
cin>>s>>e>>t;
map[len].s=s;
map[len].e=e;
map[len++].w=-t;
}
if (bellman_ford())
{
cout<<"YES"<<endl;
}
else cout<<"NO"<<endl;
}
return 0;
}
分享到:
相关推荐
poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客poj-1002源码,没有题解,题解看博客
POJ---1456.Supermarket测试数据及答案,题目描述:A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx that is measured as an integral ...
西北工业大学-c语言-POJ-题目及答案-第七季.doc
poj-2528 Mayor's posters 测试数据及答案
POJ-3299解题 C++源代码 Description Adapted from Wikipedia, the free encyclopedia The humidex is a measurement used by Canadian meteorologists to reflect the combined effect of heat and humidity. It...
poj 1000 - 2000 部分题目 官方分类 poj 1000 - 2000 部分题目 官方分类
算法-炮兵阵地(POJ-1185)(包含源程序).rar
算法-开关问题(POJ-1830)(包含源程序).rar
算法-青蛙的约会(POJ-1061)(包含源程序).rar
POJ - 2136. VerticalHistogram(统计字母个数)题目链接题目就是给你四行字符串,然后要你统计大写字母(只有大写字母)的个数,然后以特定
POJ-2870 Light Up + DFS(1级DFS+1级DFS) + Python - 思维导图 链接:https://blog.csdn.net/xxdragon126/article/details/122095922?spm=1001.2014.3001.5501
POJ3259--Wormholes,使用bellman方法。
北大POJ2002-Squares 解题报告+AC代码
北大POJ3253-POJ3253-Fence Repair【STL优先队列】 解题报告+AC代码