POJ 2253 Frogger 每条路径最大边然后选择这些最大边的最小的那个边 题解。。。根本翻译不出来
2016-08-02 13:11
281 查看
题目意思看的题解。。。根本翻译不出来(也可以理解为最小生成树的最大权值)
或者这么说吧,类似于Kruskal算法,我们每次选取不成环的最小边,直到这棵树选取了通往终点的最小边,那么最后选择的这条边必然是在树中最大的一条边,而且在其余的边中是最小的。你不会找到比这条边小的最大距离,因为比它小的最小距离都在树里了,而未选取该边前树中不包含终点,即比该边小的所有边无法到达终点。即改边满足的两个条件,最小,而且是起点到终点的最大距离。
或者这么说吧,类似于Kruskal算法,我们每次选取不成环的最小边,直到这棵树选取了通往终点的最小边,那么最后选择的这条边必然是在树中最大的一条边,而且在其余的边中是最小的。你不会找到比这条边小的最大距离,因为比它小的最小距离都在树里了,而未选取该边前树中不包含终点,即比该边小的所有边无法到达终点。即改边满足的两个条件,最小,而且是起点到终点的最大距离。
#include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> using namespace std; struct node { int x; int y; }a[210]; double d[210][210]; int main() { int n; int i, j, k; int cnt = 0; while(cin >> n){ if(n == 0) break; cnt++; for(i = 0;i < n;i++){ scanf("%d %d", &a[i].x, &a[i].y); } for(i = 0;i < n;i++){ for(j = 0;j < n;j++){ d[i][j] = d[j][i] = sqrt((double)(a[i].x-a[j].x)*(a[i].x-a[j].x)+(double)(a[i].y-a[j].y)*(a[i].y-a[j].y)); } } for(k = 0;k < n;k++){ for(i = 0;i < n;i++){ for(j = 0;j < n;j++){ if(d[i][j] > max(d[i][k],d[k][j])){ d[i][j] = max(d[i][k],d[k][j]); } } } } printf("Scenario #%d\nFrog Distance = %.3f\n\n", cnt, d[0][1]); } return 0;
相关文章推荐
- POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
- POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
- POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
- POJ 2253 Frogger【最短路变形——路径上最小的最大权】
- POJ 2253:Frogger 求每一条路径最大值里面的最小值
- [ACM] POJ 2253 Frogger (最短路径变形,每条通路中的最长边的最小值)
- POJ 2253:Frogger 求每一条路径最大值里面的最小值
- [ACM] POJ 2253 Frogger (最短路径变形,每条通路中的最长边的最小值)
- POJ 2253 Frogger (求某两点之间所有路径中最大边的最小值)
- POJ-2253 Frogger(利用dijkstra最短路求最大路径最小边)
- POJ 2253 Frogger【最短路变形——路径上最小的最大权】
- (POJ 2253)Frogger 求所有可达路径中的最大边的最小值 dijkstra || floyd 变形
- POJ 2253 Frogger (单源最短路变型 求路径上最大边权值的最小值)
- POJ 2253 Frogger (dijkstra 最大边最小)
- POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
- poj 2253 一条路径中的最大边 再找出最小的
- POJ - 2253 Frogger (所有路径中边的权值最大的中的最小值)
- POJ 2253 Frogger(最小最大距离)
- poj 2253 Frogger(求最短路径中最大边)
- POJ-2253 Frogger dijsktra查找间隔最小的路径