您的位置:首页 > 大数据 > 人工智能

stl-map-pair

2017-04-13 00:31 441 查看
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: