2 0 0 3 4 3 17 4 19 4 18 5 0Sample Output
Scenario #1 Frog Distance = 5.000 Scenario #2 Frog Distance = 1.414
题目大意:
青蛙A在第一个石头上,青蛙B在第二个石头上,求青蛙A跳往青蛙B的路径上最大一步的最小值。
有n个石头,告诉你每个石头的坐标。
代码1(Floyd):
#include
#include
#include
#include
#define N 1005
#define inf 0x3f3f3f
using namespace std;
double e[N][N];
struct node
{
int x,y;
}a[N];
int main()
{
int k=1,n;
while (~scanf("%d",&n)&&n)
{
memset(a,0,sizeof(a));
for (int i=1;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
memset(e,inf,sizeof(e));
for(int i=1;i<=n;i++)
for(int j=2;j<=n;j++)
e[i][j]=e[j][i]=sqrt((a[i].x-a[j].x*1.0)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(k!=i&&i!=j&&k!=j)
e[i][j]=min(e[i][j],max(e[i][k],e[k][j]));
printf("Scenario #%d\nFrog Distance = %.3lf\n\n",k++,e[1][2]);
}
return 0;
}
代码2(
dijkstra):
#include
#include
#include
#include
#define N 205
#define inf 0x3f3f3f
using namespace std;
double e[N][N],dis[N];
int vis[N],x[N],y[N],n;
void dij(int s,int l)
{
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
dis[i]=e[s][i];
vis[s]=1;
for(int i=1;idis[j])
{
k=j;
minn=dis[j];
}
vis[k]=1;
for(int j=1;j<=n;j++)
dis[j]=min(dis[j],max(dis[k],e[k][j]));
}
return ;
}
int main()
{
int t=1;
while(~scanf("%d",&n)&&n)
{
memset(e,0,sizeof(e));
for(int i=1;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
for(int i=1;i