stl-map-pair

#include<iostream>
//#include<bits/stdc++.h>
#include<map>
#include<vector>
#include<cmath>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long LL;
struct node
{
    LL x,y;
};
map<pair<LL,LL>,LL>pq;//用来一对一
map<LL,pair<LL,LL> >to;//用来一对一
vector< pair<LL,LL> >c;
pair<LL,LL>p1,p2,st,st1;
double dis[300][300];
double f(pair<LL,LL> u,pair<LL,LL> v)
{
    return sqrt((u.first-v.first)*(u.first-v.first)+(u.second-v.second)*(u.second-v.second));
}
int main()
{
     LL stx,sty,enx,eny,cn=1;
     memset(dis,0,sizeof(dis));
     while(cin>>stx>>sty>>enx>>eny)
     {
         pq.clear();to.clear();
         p1.first=stx,p1.second=sty;
         if(pq[p1]==0) {pq[p1]=cn++;to[cn-1]=p1;}st=p1;
         p2.first=enx,p2.second=eny;
         if(pq[p2]==0) {pq[p2]=cn++;st1=p2;to[cn-1]=p2;}
         LL x,y;
         while(cin>>x>>y)
         {
             if(x==-1&&y==-1)
             {
               for(LL i=1;i<c.size();i++)
               {
                   dis[pq[c[i-1]]][pq[c[i]]]=dis[pq[c[i]]][pq[c[i-1]]]=f(c[i-1],c[i])*6/4000;
               }
               c.clear();
               continue;
             }
             p1.first=x,p1.second=y;
             if(pq[p1]==0) {pq[p1]=cn++;to[cn-1]=p1;}
             c.push_back(p1);
         }
         for(LL i=1;i<cn;i++)
          for(LL j=1;j<cn;j++)
            if(dis[i][j]==0.0)
            {
               dis[i][j]=dis[j][i]=f(to[i],to[j])*6/1000;
            }
         for(LL k=1;k<cn;k++)
          for(LL i=1;i<cn;i++)
            for(LL j=1;j<cn;j++)
              if(dis[i][k]+dis[k][j]<dis[i][j])
                {dis[i][j]=dis[i][k]+dis[k][j];}
                printf("%.0f\n",dis[pq[st]][pq[st1]]);
     }
    return 0;
}
Subway
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值