pku 2394(最短路径,dijkastra)
2009-12-15 19:14
183 查看
注意重边,多头牛同一位置。
#include <iostream> #include <vector> using namespace std; vector<int> vec; int map[505][505]; //地图 int dis[505]; //保存最短路径的值 int cow[105]; //保存牛在哪个农场 bool visit[505]; //检查该点是否已访问 int f,p,c,m; const int inf=999999999; void dijkastra(){ //dij模板 int min_t,tag; for(int i=1;i<=f;++i){ dis[i]=map[1][i]; visit[i]=false; } visit[1]=true; for(int i=1;i<=f;++i){ min_t=inf; for(int j=1;j<=f;++j) if(!visit[j]&&dis[j]<min_t){ min_t=dis[j]; tag=j; } if(min_t==inf) return ; visit[tag]=true; for(int j=1;j<=f;++j) if(!visit[j]&&map[tag][j]<inf&&dis[tag]+map[tag][j]<dis[j]) dis[j]=dis[tag]+map[tag][j]; } } int main(){ while (cin>>f>>p>>c>>m) { vec.clear(); int a,b,t; for(int i=1;i<=f;++i) for(int j=1;j<=f;++j){ map[i][j] = inf; if(i==j) map[i][j]=0; } for(int i=0;i<p;++i){ cin>>a>>b>>t; if(map[a][b]>t){ map[a][b]=t; map[b][a]=t; } } for(int i=1;i<=c;++i) cin>>cow[i]; //input and initial dijkastra(); for(int i=1;i<=c;++i) //记录可以到达的牛的编号 if(dis[ cow[i] ]<=m) vec.push_back(i); int size=(int)vec.size(); cout<<size<<endl; for(int i=0;i<size;++i) cout<<vec[i]<<endl; } return 0; }
相关文章推荐
- PKU 1062 单源最短路径
- 完全最短路径问题Floyd算法 pku 1125 Stockbroker Grapevine
- PKU1062(昂贵的聘礼)单源点最短路径-Dijkstra算法
- PKU1511(Invitation Cards)最短路径-邻接表+SPFA算法
- POJ_2394_最短路径---SPFA算法
- PKU3013(Big Christmas Tree)-最短路径-SPFA
- PKU 1847 最短路径 djistrla
- 最短路径算法-Dijkastra
- pku 1847(最短路径,floyd)
- pku 1797 Heavy Transportation(最短路径)
- pku 1511 Invitation Cards(最短路径)
- pku openjudge 我爱北大 floyd算法求最短路径
- Pku acm 1062 昂贵的聘礼 数据结构题目解题报告(七)—单源最短路径:Dijkstra算法
- PKU1125 最短路径 Floyd-Warshall算法
- pku 1151 Invitation Cards(单源最短路径 SPFA)
- pku 3259(最短路径,spfa)
- pku 1511(最短路径,spfa静态邻接表)
- SDUT2143 图结构练习——最短路径
- 无权最短路径
- 最短路径算法