poj2502

#include<stdio.h>
#include<math.h>
double x[205];
double y[205];
double w[205][205];
int k;
double xx,yy;

void floyd(){
 int l,i,j;
 for(l=0;l<k;l++)
  for(i=0;i<k;i++)
   for(j=0;j<k;j++)
    if(w[i][j]>w[i][l]+w[l][j])
     w[i][j]=w[i][l]+w[l][j];}

int main(){
 int i,j;

 for(i=0;i<205;i++)//
  for(j=0;j<205;j++){
   if(j!=i) w[i][j]=0xffff;
  else w[i][j]=0;}

  
 scanf("%lf%lf",&x[0],&y[0]);
 scanf("%lf%lf",&x[1],&y[1]);
 w[0][1]=60*sqrt((x[1]-x[0])*(x[1]-x[0])+(y[1]-y[0])*(y[1]-y[0]))/10000;
 w[1][0]=w[0][1];
//printf("%0.2lf/n",w[0][1]);
 k=2;
 while(1){
  if(2!=scanf("%lf%lf",&xx,&yy)) break;
  x[k]=xx;y[k]=yy;
  w[k][0]=60*sqrt((x[k]-x[0])*(x[k]-x[0])+(y[k]-y[0])*(y[k]-y[0]))/10000;
  w[0][k]=w[k][0];
  w[k][1]=60*sqrt((x[k]-x[1])*(x[k]-x[1])+(y[k]-y[1])*(y[k]-y[1]))/10000;
  w[1][k]=w[k][1];
 
  k++;

  while(1){
   scanf("%lf%lf",&xx,&yy);
   if(xx==-1&&yy==-1)
    break;
   x[k]=xx;y[k]=yy;

  w[k][0]=60*sqrt((x[k]-x[0])*(x[k]-x[0])+(y[k]-y[0])*(y[k]-y[0]))/10000;
  w[0][k]=w[k][0];

  w[k][1]=60*sqrt((x[k]-x[1])*(x[k]-x[1])+(y[k]-y[1])*(y[k]-y[1]))/10000;
  w[1][k]=w[k][1];

  w[k][k-1]=60*sqrt((x[k]-x[k-1])*(x[k]-x[k-1])+(y[k]-y[k-1])*(y[k]-y[k-1]))/40000;
  w[k-1][k]=w[k][k-1];
 
  k++;
   }
 
  
 }
 for(i=0;i<k;i++)//次部是把所有点连起来!!!害我wa了n次
  for(j=0;j<k;j++)
   if((60*sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]))/10000)<w[i][j])
    w[i][j]=60*sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]))/10000;
floyd();
printf("%0.0lf/n",w[0][1]);//小数点后的数是输出小数位数,是0代表没有小数部分输出
 return 0;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值