Bellman及其优化
来源:互联网 发布:弹丸论破未来篇 知乎 编辑:程序博客网 时间:2024/06/07 05:48
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<queue>#include<vector>#include<set>#include<ctime>#define MAXX 1e6using namespace std;int first[1000010],NEXT[1000010],u[1000010],v[1000010],w[1000010],cont,dis[1000010],vis[1000010];//c存起点,v存终点,w存权值int N,M,S,T;bool buildmap(int a,int b,int c)//建图{ u[cont]=a,v[cont]=b,w[cont]=c;//存边 NEXT[cont]=first[a]; first[a]=cont; cont++;}void BellmanDU()//Bellman队列优化{ queue<int> q; memset(dis,-1,sizeof(dis));//标记从起点到各个点的最短路 memset(vis,0,sizeof(vis));//标记点是否在队列里 q.push(S); vis[S]=1; dis[S]=0; while(!q.empty()) { int s=q.front(); q.pop(); vis[s]=0; int k=first[s]; while(k!=-1)//遍历以s为起点的所有点 { if(dis[v[k]]==-1||(dis[v[k]]>dis[u[k]]+w[k]))//是否松弛成功 { dis[v[k]]=dis[u[k]]+w[k]; if(!vis[v[k]])//该点是否在队列里 { vis[v[k]]=1; q.push(v[k]);//入队 } } k=NEXT[k];//下一条边 } }}void Bellman()//Bellman算法{ memset(dis,-1,sizeof(dis));//初始化 dis[S]=0; for(int i=1; i<=N-1; i++) //松弛N-1次 for(int j=1; j<=M; j++) //判断每条边 if(dis[v[j]]==-1||dis[v[j]]>dis[u[j]]+w[j]) dis[v[j]]=dis[u[j]]+w[j]; /*flag=0;//检测负权回路 for(int j=1;j<=M;j++) if(dis[v[j]]>dis[u[j]]+w[j]) flag=1; if(flag) printf("此图含有负权回路\n");*/}int main(){ while(~scanf("%d%d%d%d",&N,&M,&S,&T))//点,边,起点,终点 { memset(first,-1,sizeof(first));//first存以下标为起点的第一条边的标号,标号为u,v,w三个数组的下标 cont=1; for(int i=0; i<M; i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); buildmap(a,b,c); buildmap(b,a,c);//双向图 //有可能有重边 } Bellman();//BellmanDU(); printf("%d\n",dis[T]); }}
0 0
- Bellman及其优化
- Bellman-Ford 算法及其优化
- Bellman-Ford 算法及其优化
- Bellman-Ford算法及其优化
- Bellman-Ford 算法及其优化
- Bellman-Ford 算法及其优化
- Bellman-Ford 算法及其优化
- Bellman-Ford 算法及其优化
- Bellman-Ford 算法及其优化(转)
- Bellman-Ford 算法及其优化(转) 收藏
- Bellman-Ford 算法及其优化以及SPFA
- Bellman-Ford算法及其队列优化(SPFA)
- Bellman-Ford算法及其队列优化与实战入门
- 负权边的最短路径--Bellman-Ford算法及其优化
- Bellman-Ford的队列优化
- Bellman-Ford算法队列优化
- Bellman-Ford单源最短路径+优化
- Bellman-Ford的队列优化
- Nginx 服务器配置问题,首页 403 及提示下载的解决方法
- Android集成支付宝踩过的坑
- VS2015给命令行添加参数
- 机器学习之(四)特征工程以及特征选择的工程方法
- multirotor flight control
- Bellman及其优化
- BZOJ4382[POI2015] Podział naszyjnika
- UVA 10559 Blocks(记忆化dp)
- bzoj 4515: [Sdoi2016]游戏(树链剖分+线段树)
- CountDownLatch的介绍和使用
- Dijkstar及其优先队列优化
- HTML5中的save()和restore()方法的用法
- 机器学习之(三)梯度下降法的三种形式BGD、SGD以及MBGD
- CSRF跨域请求伪造