Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:这倒题可以用 dijkstra的优先队列过吗?In Reply To:这倒题可以用 dijkstra的优先队列过吗? Posted by:tenglinxi at 2016-05-24 18:32:29 > 渣渣自己写的代码: > #include<stdio.h> > #include<string.h> > #include<vector> > #include<algorithm> > #include<queue> > #include<cmath> > #include<iostream> > > using namespace std; > > const int maxn=1005; > vector<pair<int,double> >E[maxn]; > double x[maxn],y[maxn]; > double d[maxn]; > double maps[maxn][maxn]; > > void init() > { > for(int i=0;i<maxn;i++)E[i].clear(); > for(int i=0;i<maxn;i++)d[i]=1e9; > //for(int j=0;j<maxn;j++) > //d[i][j]=1e9; > } > > int main() > { > int t; > while(~scanf("%d",&t)) > { > 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++) > { > //if(i==j)continue; > maps[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); > E[i].push_back(make_pair(j,maps[i][j])); > E[j].push_back(make_pair(i,maps[i][j])); > } > } > /*for(int i=1;i<=3;i++) > { > for(int j=0;j<=5;j++) > { > cout<<E[i][j].second<<" "; > } > cout<<endl; > }*/ > //printf("%.3lf",E[1][3].second); > priority_queue<pair<double,int> >Q; > Q.push(make_pair(-d[1],1)); > d[1]=0; > while(!Q.empty()) > { > int now=Q.top().second; > Q.pop(); > for(int i=0;i<E[now].size();i++) > { > int v=E[now][i].first; > if(d[v]>d[now]&&d[v]>E[now][i].second) > { > if(d[now]>E[now][i].second) > { > d[v]=d[now]; > } > else if(d[now]<E[now][i].second) > { > d[v]=E[now][i].second; > } > Q.push(make_pair(-d[v],v)); > } > } > } > printf("%.3lf \n",d[2]); > > } > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator