POJ2253《Frogger》方法:Floyd-Wallshall
2013-02-28 10:36
375 查看
将Floyd算法中求每对顶点间的最小距离,条件换成每对顶点间最长序列的最大跳数,所以要多加进去k。
#include <iostream> #include <cstdio> #include <cmath> #include <iomanip> using namespace std; class coordinate { public: double x, y; } points[201]; double path[201][201]; int main() { //freopen("temp.txt", "r", stdin); int n; int cnt = 1; while (cin >> n) { if (n == 0) break; for (int i = 1; i <= n; ++i) cin >> points[i].x >> points[i].y; for (int i = 1; i <= n-1; ++i) { for (int j = i+1; j <= n; ++j) { double x = points[i].x - points[j].x; double y = points[i].y - points[j].y; path[i][j] = path[j][i] = sqrt(x*x + y*y); //双向性 } } // Floyd-Wallshall // 这里将原本的求两点间最短路径,变为求两点间路径的最大跳数 for (int k = 1; k <= n; ++k) { for (int i = 1; i <= n-1; ++i) { for (int j = i+1; j <= n; ++j) { if (path[i][k] < path[i][j] && path[k][j] < path[i][j]) { if (path[i][k] < path[k][j]) { path[i][j] = path[j][i] = path[k][j]; //不要忘了双向性 } else { path[i][j] = path[j][i] = path[i][k]; } } } } } cout << "Scenario #" << cnt++ << endl; cout << "Frog Distance = " << fixed << setprecision(3) << path[1][2] << endl << endl; } return 0; }
相关文章推荐
- POJ 2253 Frogger(Dijkstra or Floyd)
- Floyd-Warshall算法(求解任意两点间的最短路) 详解 + 变形 之 poj 2253 Frogger
- POJ-2253 Frogger(Dijkstra)(Floyd)
- POJ 2253 Frogger 【Floyd】
- poj 2253 Frogger 最短路径变形(两种方法)
- (POJ 2253)Frogger 求所有可达路径中的最大边的最小值 dijkstra || floyd 变形
- POJ 2253 Frogger (Floyd)
- POJ2253 Frogger(Floyd)
- POJ 2253 Frogger(最短路--floyd变形)
- Frogger poj 2253 floyd
- 最短路(Floyd_Warshall) POJ 2253 Frogger
- poj2253 Frogger 图论,Floyd
- Frogger poj 2253 floyd
- POJ-2253 Frogger (Floyd)
- POJ 2253 Frogger最短路(floyd)
- POJ 2253 Frogger(floyd 或 dijstra)
- poj 2253 Frogger (最短路Floyd)
- poj 2253 Frogger (最短路Floyd)
- POJ 2253 Frogger(Floyd)
- POJ 2253 Frogger(floyd)