最佳路线,最短路径
2018-03-10 17:23
267 查看
#include <iostream> #include<algorithm> #include<cstring> using namespace std; int T,N,M,K,A,S,u,v,w,h[1001],k[1001],p[1001][1001],t[1001][1001],d[1001][1001],dis[1001],b[1001][1001],sta[1001]; bool use[1001]; int minx(int N,int dis[]) { int i; int n=0; dis[0]=999999; for(i=1; i<=N; i++) if(dis >dis[i]&&!use[i]) { n=i; } return n; } int main() { std::ios::sync_with_stdio(false); cin.tie(0); int i,j; int tt; int sum; int mm; int B; cin>>T; int mark[1001]; while(T--) { memset(p,0,sizeof(p)); memset(mark,0,sizeof(mark)); memset(t,0,sizeof(t)); memset(d,0,sizeof(d)); //memset(dis,0,sizeof(dis)); memset(b,0,sizeof(b)); memset(sta,0,sizeof(sta)); memset (use,false,sizeof use); cin>>N>>M>>K>>A>>S; for(i=0; i<M; i++) { cin>>u>>v>>w; b[u][v]=w; b[v][u]=w; } for(i=1; i<=K; i++) { cin>>h[i]>>k[i]; for(j=1; j<=h[i]; j++) { cin>>p[i][j]; sta[p[i][j]]=1; } for(j=1; j<=h[i]; j++) { cin>>d[i][j]; } for(j=1; j<=k[i]; j++) { cin>>t[i][j]; } } for(i=1; i<=N; i++) { if(i==A) dis[i]=0; else dis[i]=S+1; } sum=N; while(sum--) { // cout<<dis[1]<<" "<<dis[2]<<" "<<dis[3]<<" "<<dis[4]<<endl; B=minx(N,dis); // cout<<"B"<<B<<endl; use[B]=true; for(i=1; i<=N; i++) { if(b[B][i]>0&&dis[i]>b[B][i]+dis[B]) { dis[i]=b[B][i]+dis[B]; // cout<<i<<"==========="<<dis[i]<<endl; mark[i]=0; } } if(sta[B]==1) { for(i=1; i<=K; 4000 i++) { mm=0; for(j=1; j<=h[i]; j++) { tt=0;mm=mm+d[i][j]; if(p[i][j]==B) { if(mark[B]!=i) for(int n=1; n<=k[i]; n++) { if(dis[B]<=mm+t[i] ) { tt=t[i] ; break; } } if(j+1>h[i]) j=0; if(dis[p[i][j+1]]>mm+tt) { dis[p[i][j+1]]=mm+tt; //cout<<i<<" "<<p[i][j+1]<<"-------------"<<mm+tt<<endl; mark[p[i][j+1]]=i; if(j+1==1){mark[p[i][j+1]]=0;} } break; } } } } } for(i=1; i<=N; i++) { if(dis[i]>S) cout<<"-1"; else cout<<dis[i]; if(i<N) cout<<" "; else cout<<endl; } } return 0; }
相关文章推荐
- floyd 记录最短路径路线
- arcgis for flex api version3.7 教程:7.使用Directions查询路线(最短路径分析)
- dijkstra spfa记录最短路径路线
- 第二次周赛D题 hdu 2448 【最短路径+最佳匹配】
- 图论——寻找最短路径路线的两种算法
- LeetCode 64. Minimum Path Sum 二维路线最短路径
- noip2001 car的旅行路线 (floyd求解最短路径长度)
- 最短路径_求最小值(牵马从a到b,求最短时间)
- HDOJ 3970 最短路径问题[Dijsktra算法的应用]
- 最短路径-Dijkstra(poj 1135)
- (dijkstra 1.1)hdu 1546 Idiomatic Phrases Game(dijkstra——当建图规则为:当一个单词的后4个字符和另一个单词的前4个字符一致时才建边,求最短路径)
- 1423 最短路径
- HDOJ 最短路径问题
- POJ-3268-Disease Management-(最短路径spfa)
- 寻找最短路径Dijkstra算法
- 【图的最短路径】迪杰斯特拉算法求图的最短路径
- 题目1008:最短路径问题
- Dijkstra算法是解单源最短路径问题的一个贪心算法
- 最短路径条数
- 最短路径的几种算法的路径问题(floy , dij , spfa)