您的位置:首页 > 其它

pku_2253_Frogger

2013-05-16 20:38 183 查看
求两个石头之间的最短距离,问第一个点到第二点的最短距离,这道题的加强版是个好题~但数据太小了弗洛伊德直接搞定.

源代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>

using namespace std;

const int N=210;
typedef struct _node
{
int x,y;
}node;
int n;
double graph

;
node a
;

void init()
{
int i;
for(i=0;i<n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
int j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
double x=fabs((double)(a[i].x-a[j].x));
double y=fabs((double)(a[i].y-a[j].y));
graph[i][j]=graph[j][i]=sqrt(x*x+y*y);
}
}

inline double max(double x,double y)
{
return x>y?x:y;
}

inline double min(double x,double y)
{
return x>y?y:x;
}

void floyd()
{
int k,i,j;
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
graph[i][j]=min(graph[i][j],max(graph[i][k],graph[k][j]));
}

int main()
{
int t=1;
while(scanf("%d",&n),n)
{
printf("Scenario #%d\n",t++);
init();
floyd();
printf("Frog Distance = %.3lf\n",graph[0][1]);
puts("");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: