题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66569#problem/B
代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<cmath>
const int maxn=1005;
double x[maxn],y[maxn];
double e[maxn][maxn];
double dis[maxn];
int book[maxn];
using namespace std;
void init()
{
memset(book,0,sizeof(book));
memset(e,0,sizeof(e));
memset(dis,0,sizeof(dis));
}
int main()
{
int t,temp=1;
while(~scanf("%d",&t))
{
if(t==0)
break;
init();
for(int i=1;i<=t;i++)
{
scanf("%lf%lf",&x[i],&y[i]);
}
for(int i=1;i<=t;i++)
{
for(int j=1;j<=t;j++)
{
e[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
}
for(int i=1;i<=t;i++)
dis[i]=e[1][i];
for(int i=1;i<=t;i++)
book[i]=0;
book[1]=1;
int min,u;
for(int i=1;i<=t-1;i++)
{
min=maxn;
for(int j=1;j<=t;j++)
{
if(book[j]==0&&dis[j]<min)
{
min=dis[j];
u=j;
}
}
book[u]=1;
for(int v=1;v<=t;v++)
{
if(e[u][v]<maxn)
{
if(dis[v]>dis[u]&&dis[v]>e[u][v])
{
//dis[v]=max(dis[u],e[u][v]);
if(dis[u]>e[u][v])
{
dis[v]=dis[u];
}
else if(dis[u]<=e[u][v])
{
dis[v]=e[u][v];
}
}
}
}
}
printf("Scenario #%d\nFrog Distance = %.3f\n\n",temp++,dis[2]);
}
}
一共找了4天的BUG,今天突然灵光一现,找到BUG。啦啦啦啦啦啦。