HDU 2066 一个人的旅行 (SPFA + 链式前向星)
来源:互联网 发布:长沙理工大学教务网络 编辑:程序博客网 时间:2024/06/07 13:17
http://acm.hdu.edu.cn/showproblem.php?pid=2066
直接暴力啊 SPFA
SPFA做法步骤:
int n; //表示n个点,从1到n标号
int s,t; //s为源点,t为终点
int dis[N]; //d[i]表示源点s到点i的最短路
int p[N]; //记录路径(或者说记录前驱)
queue q; //一个队列,用STL实现,当然可有手打队列
bool vis[N]; //vis[i]=1表示点i在队列中 vis[i]=0表示不在队列中
- 初始化:
memset(vis,false,sizeof(vis)); memset(dis,INF,sizeof(dis)); dis[s] = 0; while(!que.empty()) que.pop();
步骤:
- 读取队头顶点u,并将队头顶点u出队(记得消除标记);
- 将与点u相连的所有点v进行松弛操作,如果能更新估计值(即令d[v]变小),那么就更新,另外,如果点v没有在队列中,那么要将点v入队(记得标记),如果已经在队列中了,那么就不用入队
- 以此循环,直到队空为止就完成了单源最短路的求解
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <set>#include <vector>#include <map>#include <queue>#include <stack>#include <algorithm>using namespace std;typedef long long LL;const int N = 2000+100;const int INF = 0x3f3f3f3f;int dis[N];bool vis[N];queue<int> que;struct Node{ int next,to,wei; Node(){} Node(int a,int b,int c) :next(a),to(b),wei(c){}};int head[N];struct Node edge[N];int nedge;void add_edge(int a,int b,int c ){ edge[++nedge] = Node(head[a],b,c); head[a] = nedge; edge[++nedge] = Node(head[b],a,c); head[b] = nedge; }void Init(){ memset(vis,false,sizeof(vis)); memset(dis,INF,sizeof(dis)); while(!que.empty()) que.pop();}int spfa(int s,int d){ dis[s] = 0; que.push(s); vis[s] = true; while(!que.empty()) { int now = que.front(); que.pop(); vis[now] = false; for(int i=head[now];~i;i=edge[i].next) { int v = edge[i].to; if(dis[now] + edge[i].wei < dis[v]) { dis[v] = dis[now] + edge[i].wei; if(!vis[v]) { que.push(v); vis[v] = true; } } } } return dis[d];}int main(){ int t,s,d; while(scanf("%d %d %d",&t,&s,&d)!=EOF) { memset(head,-1,sizeof(head)); nedge = -1; for(int i=1;i<=t;i++) { int x,y,w; scanf("%d %d %d",&x,&y,&w); add_edge(x,y,w); } int ss[N]; for(int i=1;i<=s;i++) scanf("%d",&ss[i]); int ans = INF; for(int i=1;i<=d;i++) { int now; scanf("%d",&now); for(int i=1;i<=s;i++) Init(),ans = min(ans,spfa(ss[i],now)); } printf("%d\n",ans); } return 0;}
0 0
- HDU 2066 一个人的旅行 (SPFA + 链式前向星)
- HDU 2066 一个人的旅行(Spfa)
- HDU 2066 一个人的旅行 dijkstra&&spfa
- hdu 2066 一个人的旅行-spfa
- HDU 2066 一个人的旅行(spfa)
- spfa hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行 SPFA
- HDU 2066 一个人的旅行 spfa
- HDU 2066 一个人的旅行(spfa,dijkstra)
- HDU 2066(一个人的旅行) SPFA(最短路问题)
- HDU 2066 一个人的旅行(SPFA +Floyd-Warshall算法)
- hdu 2066 一个人的旅行(SPFA算法)
- hdu-2066 一个人的旅行(SPFA做法)
- HDU 2066 一个人的旅行(单源最短路SPFA)
- hdu 2066 一个人的旅行(最短路+SPFA)
- 链式前向星+SPFA
- spfa+链式前向星
- SPFA+链式前向星
- 随诊医生3---应用介绍页面
- Windows下python安装问题解决方案
- IRP 处理浅析
- MySQL主从复制技术与读写分离技术amoeba应用
- 协同过滤算法的几篇文章PFM/svd/ svd++
- HDU 2066 一个人的旅行 (SPFA + 链式前向星)
- 掌握JS中的“this” (一)
- Testbench 阻塞赋值与非阻塞赋值
- 图解JSP与Servlet的关系
- 分页居中实现
- mybatis-generator自动生成DAO文件
- 最新版SDWebImage的使用
- Fresco——专为ANDROID加载图片
- winform 自定义控件-按钮