您的位置:首页 > 其它

最短路(Floyd_Warshall) POJ 2253 Frogger

2015-03-27 18:26 459 查看
题目传送门

 /*
最短路:Floyd算法模板题
*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
using namespace std;

const int MAXN = 200 + 10;
const int INF = 0x3f3f3f3f;
double d[MAXN][MAXN];
int used[MAXN];
struct NODE
{
int x, y;
}node[MAXN];

double dis(int j, int i)
{
return sqrt ((node[j].x - node[i].x) * (node[j].x - node[i].x) + (node[j].y - node[i].y) * (node[j].y - node[i].y));
}

void Floyd_Warshall(int n)
{
for (int k=1; k<=n; ++k)
{
for (int i=1; i<=n-1; ++i)
{
for (int j=i+1; j<=n; ++j)
{
if (d[i][k] < d[i][j] && d[k][j] < d[i][j])
{
if (d[i][k] < d[k][j])
d[i][j] = d[j][i] = d[k][j];
else
d[i][j] = d[j][i] = d[i][k];
}
}
}
}

printf ("Frog Distance = %.3f\n", d[1][2]);
}

int main(void)      //POJ 2253  Frogger
{
//freopen ("D.in", "r", stdin);

int n;
int cnt = 0;
int first = 1;
while (~scanf ("%d", &n) && n)
{
for (int i=1; i<=n; ++i)
{
scanf ("%d%d", &node[i].x, &node[i].y);
}
for (int i=1; i<=n-1; ++i)
{
for (int j=i+1; j<=n; ++j)
{
d[i][j] = d[j][i] = dis (i, j);
}
}

printf ("Scenario #%d\n", ++cnt);
Floyd_Warshall (n);
puts ("");
}

return 0;
}

/*
Scenario #1
Frog Distance = 5.000

Scenario #2
Frog Distance = 1.414
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: