HDU 2066 一个人的旅行
2011-09-23 19:47
260 查看
HDU_2066
直接用队列优化的Bellman-Ford算法求到各个点的最短路,然后再找到各个想去的地方的最短路的最小值即可。
直接用队列优化的Bellman-Ford算法求到各个点的最短路,然后再找到各个想去的地方的最短路的最小值即可。
#include<stdio.h> #include<string.h> int q[1010],inq[1010]; int G[1010][1010],d[1010]; int main() { int i,j,k,u,v,t,T,S,D,n,ans,front,rear; while(scanf("%d%d%d",&T,&S,&D)==3) { memset(G,0,sizeof(G)); n=0; for(i=0;i<T;i++) { scanf("%d%d%d",&u,&v,&t); if(!G[u][v]||t<G[u][v]) G[u][v]=G[v][u]=t; if(u+1>n) n=u+1; if(v+1>n) n=v+1; } for(i=0;i<n;i++) d[i]=1000000000; front=rear=0; memset(inq,0,sizeof(inq)); for(i=0;i<S;i++) { scanf("%d",&u); d[u]=0; q[rear++]=u; inq[u]=1; } while(front!=rear) { u=q[front++]; inq[u]=0; if(front>n) front=0; for(v=0;v<n;v++) if(G[u][v]&&d[u]+G[u][v]<d[v]) { d[v]=d[u]+G[u][v]; if(!inq[v]) { q[rear++]=v; inq[v]=1; if(rear>n) rear=0; } } } ans=1000000000; for(i=0;i<D;i++) { scanf("%d",&t); if(d[t]<ans) ans=d[t]; } printf("%d\n",ans); } return 0; }
相关文章推荐
- HDU 2066 一个人的旅行
- (*)hdu 2066 一个人的旅行(Dijkstra)
- hdu-2066 一个人的旅行(最短路spfa)
- hdu 2066 一个人的旅行 最短路
- hdu 2066 一个人的旅行(dijkstra)
- HDU 2066 一个人的旅行(最短路的简单题)
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行 最短路问题
- HDU-2066-一个人的旅行
- HDU 2066 一个人的旅行.
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行 (dij+heap)
- hdu 2066 一个人的旅行 dijkstra
- HDU 2066 一个人的旅行【最短路,多起点多终点,Dijkstra算法+spfa算法】
- hdu-2066 一个人的旅行
- hdu 2066 一个人的旅行(最短路径 Dijkstra算法)
- HDU 2066 一个人的旅行(Dijkstra+Floyd)
- hdu 2066:一个人的旅行
- (阶段三 dijkstra算法温习1.2)HDU 2066 一个人的旅行(使用dijkstra来解决多源起点和多源终点的最短路径问题)
- HDU 2066 一个人的旅行