spfa算法
来源:互联网 发布:linux exec用法 编辑:程序博客网 时间:2024/05/21 18:54
#include <iostream> #include <cstring> #include <queue> using namespace std; const int inf = 0x3fffffff; int d[10005]; int vis[10005]; int num[10005];struct cmp { bool operator()(int x,int y) { return x>y; } }; struct node{int v,w;};vector<node>a[10005];int n,m;bool spfa(int s0) { priority_queue<int,vector<int>,cmp> q; memset(vis,0,sizeof(vis)); memset(num,0,sizeof(num)); fill(d,d+10005,inf); d[s0] = 0; q.push(s0); vis[s0] = true; num[s0]++; while(!q.empty()) { int p = q.top(); q.pop(); for(int i=0;i<a[p].size();i++) { int v=a[p][i].v; if(d[p]+a[p][i].w<d[v]) { d[v] = d[p]+a[p][i].w; if(!vis[v]) { q.push(v); num[v]++; if(num[v]>=n)//存在负环 { return false; } vis[v]=true; } } } vis[p]=0; } return true; } int main(){ int k,i,u,v,w; //freopen("in.txt","r",stdin); while(~scanf("%d%d",&n,&m)) { for(i=0;i<=1005;i++) { a[i].clear();} if(n==0) break;for(i=0;i<m;i++){node t;scanf("%d%d%d",&u,&v,&w);t.v=v;t.w=w;a[u].push_back(t);t.v=u;a[v].push_back(t);}bool c=spfa(1);printf("%d\n",d[n]);}}
阅读全文
0 0
- SPFA 算法
- SPFA 算法
- SPFA算法
- SPFA算法
- SPFA算法
- SPFA算法
- Spfa算法
- SPFA算法
- SPFA 算法
- Spfa算法
- SPFA算法
- SPFA算法
- SPFA算法
- SPFA算法
- spfa算法
- SPFA算法
- SPFA算法
- SPFA算法
- php正则去除文章页标签范例
- laravel Task Scheduling(任务调度)在windows下的使用
- IMPDP命令
- Flink入门教程--Jobs and Scheduling(任务和调度)
- 笔记:linux下查询网络端口被监听的信息方法。
- spfa算法
- 解决jsp上传文件,重启tomcat后文件和文件夹自动删除
- CodeForces 723C Polycarp at the Radio (贪心+暴力)
- think in java第十六章数组 总结随笔
- diff.js 列表对比算法 源码分析
- HDU 6199 gems gems gems dp
- org.mybatis.spring.MyBatisSystemException
- python3 如何实现python2 中cmp()函数的功能
- 关于intern和字符串