HDU 2066 一个人的旅行
2016-09-26 15:59
316 查看
一个人的旅行
多起点,多终点,再在其中找一个最短的,如果估算数据小的话可以多次求最短路,更好的还是用弗洛伊德算法,预先打表,对于后面的问题直接调用,节约时间。这道题基本上就是弗洛伊德算法的模板。注意输入可能有重复边。#include<cstring> #include<cstdio> #include<algorithm> #define M 0xfffffff #define N 1002 using namespace std; int n,m,j,i,k,l,s,d; int a ,b ; int main() { while(~scanf("%d%d%d",&m,&s,&d)) { for(i=0; i<N; i++) for(j=0; j<N; j++) { if(i!=j) a[i][j]=M; else a[i][j]=0; b[i][j]=j; } for(i=0; i<m; i++) { scanf("%d%d%d",&j,&k,&l); if(l<a[j][k]) { a[j][k]=l; a[k][j]=l; } } for(i=1; i<=N; i++) { for(j=1; j<=N; j++) { if(i==j) continue; if(a[i][j]>=M) continue; for(k=1; k<=N; k++) { if(a[j][k]>a[j][i]+a[i][k]) { a[j][k]=a[j][i]+a[i][k]; b[j][k]=b[j][i]; } } } } int start ,end ; int minm=M; for(i=1; i<=s; i++) scanf("%d",&start[i]); for(i=1; i<=d; i++) { scanf("%d",&end[i]); for(j=1; j<=s; j++) { if(a[start[j]][end[i]]<minm) minm=a[start[j]][end[i]]; } } printf("%d\n",minm); } return 0; }
相关文章推荐
- HDU 2066 一个人的旅行 (裸的dij)
- HDU 2066 一个人的旅行【最短路,多起点多终点,Dijkstra算法+spfa算法】
- hdu 2066 一个人的旅行(Dijkstra求最短路问题)
- hdu 2066 一个人的旅行 Dijkstra+优先队列优化
- HDU 2066 一个人的旅行 - from lanshui_Yang
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行(最短路+SPFA)
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行(SPFA +Floyd-Warshall算法)
- HDU 2066 一个人的旅行(Dijkstra)
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行 (DIJ)
- HDU2066_一个人的旅行(Dijkstra最短路)
- HDU 2066 一个人的旅行dijikstra算法
- hdu-2066-一个人的旅行
- HDU-2066 一个人的旅行
- hdu 2066 一个人的旅行_最短路
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行(Dijkstra求最短路问题)
- HDU_2066 一个人的旅行(Dijkstra)