POJ 2253 Frogger (单源最短路变型 求路径上最大边权值的最小值)
2017-04-26 17:01
696 查看
题目链接
POJ2253题目大意
输入N(2≤N≤200)个点的坐标,任意两点可以互相到达,经过的距离为它们的欧式距离。现在从1号点到2号点有多条路径,求这些路径中最大边权值的最小值。分析
这题为单源最短路的变型题。首先建图,由于点较少,用邻接矩阵即可,任意两点间建立无向边,权值为它们之间的欧式距离。
最原始的单源最短路问题可以求起点到终点间每条路径各自的权值和的最小值,而这道题是每条路径中最大边权值的最小值,原来dis[i]维护的是源点到i号顶点的最短总路径长度,现在dis[i]维护源点到i顶点最大边权值,相应地,松弛操作改写为:dis[i]=max(dis[j],a[i][j]);即可,用Dijkstra、SPFA都行。
代码
SPFA+邻接矩阵#include <iostream> #include <cstdio> #include <cmath> #include <queue> #define Max(a,b) (a>b?a:b) using namespace std; const int INF=99999999; double e[205][205],dis[205]; int book[205]; void SPFA(int n) { queue<int> Q; int i,j; for (i=1;i<=n;i++) { dis[i]=INF; book[i]=0; } dis[1]=0; book[1]=1; Q.push(1);//源点入队 while (!Q.empty()) { i=Q.front(); Q.pop(); book[i]=0; for (j=1;j<=n;j++)//扫描当前顶点i所有出边 if (dis[j]>Max(dis[i],e[i][j]))//判断是否松弛成功 { dis[j]=Max(dis[i],e[i][j]); if (!book[j])//判断j是否在队列中 { Q.push(j); book[j]=1;; } } } } int main() { int x[205],y[205],n,i,j,t; t=0; while (scanf("%d",&n)!=EOF) { if (n==0) break; for (i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); for (i=1;i<=n;i++) for (j=1;j<=n;j++) e[i][j]=sqrt(double(x[i]-x[j])*(x[i]-x[j])+double(y[i]-y[j])*(y[i]-y[j]));//建图 SPFA(n); printf("Scenario #%d\n",++t); printf("Frog Distance = %.3f\n\n",dis[2]); } return 0; }
相关文章推荐
- POJ 2253 Frogger【最短路变形——路径上最小的最大权】
- POJ-2253 Frogger(利用dijkstra最短路求最大路径最小边)
- POJ 2253 Frogger【最短路变形——路径上最小的最大权】
- POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
- POJ 2253 Frogger (求某两点之间所有路径中最大边的最小值)
- POJ 2253:Frogger 求每一条路径最大值里面的最小值
- POJ - 2253 Frogger (所有路径中边的权值最大的中的最小值)
- (POJ 2253)Frogger 求所有可达路径中的最大边的最小值 dijkstra || floyd 变形
- POJ 2253 Frogger 每条路径最大边然后选择这些最大边的最小的那个边 题解。。。根本翻译不出来
- POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
- POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
- POJ 2253:Frogger 求每一条路径最大值里面的最小值
- POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
- poj 2455 Secret Milking Machine 【二分 + 最大流】 【1到N不重复路径不少于T条时,求被选中路径上的最大边权值 的最小值】
- POJ 2253:Frogger:dij的最短路思想变型
- POJ - 2253 Frogger 单源最短路
- [ACM] POJ 2253 Frogger (最短路径变形,每条通路中的最长边的最小值)
- POJ 2253 Frogger 【最大边权的最小值】
- POJ - 2253 Frogger (最大权值最小化)
- poj2253 Frogger(最小生成树求最大边/最短单源路径变形)