| ||||||||||
| 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:heap+dij why wa?In Reply To:heap+dij why wa? Posted by:rainytry at 2010-05-04 17:11:23 > #include <iostream>
> #include <cstring>
> #include <vector>
> #include <algorithm>
> #include <queue>
> #include <cstdio>
>
> using namespace std;
>
> const int MAX=1001;
> const int INF=2000000000;
>
> struct point{
> int to;
> int w;
> bool operator <(const point& r) const {
> return r.w<w;
> }
> };
>
> vector < point > dot[MAX];
>
> int dij(int start,int end)
> {
> point e,ne;
> priority_queue < point > que;
> int flag[MAX],i;
> int dis[MAX];
>
> memset(flag,0,sizeof(flag));
> for(i=0;i<MAX;++i)
> dis[i]=INF;
>
> e.to=start;
> e.w=0;
> dis[e.to]=0;
> que.push(e);
> while(!que.empty())
> {
> e=que.top();
> que.pop();
> if(e.to==end)
> {
> return e.w;
> }
> if(flag[e.to])
> {
> continue;
> }
> flag[e.to]=1;
> for(i=0;i<dot[e.to].size();++i)
> {
> if(dot[e.to][i].w+e.w<dis[dot[e.to][i].to])
> {
> dis[dot[e.to][i].to]=dot[e.to][i].w+dis[e.to];
> ne.w=dis[dot[e.to][i].to];
> ne.to=dot[e.to][i].to;
> que.push(ne);
> }
> }
> }
> }
>
> int main()
> {
> // freopen("in.txt","r",stdin);
> point a;
> int t,n;
> int i;
> int p,q,cw,ans;
> while(scanf("%d%d",&t,&n)!=EOF)
> {
> for(i=0;i<t;++i)
> {
> scanf("%d%d%d",&p,&q,&cw);
> a.to=q-1;
> a.w=cw;
> dot[p-1].push_back(a);
> }
> ans=dij(0,n-1);
> printf("%d\n",ans);
> }
> return 0;
> }
这是个无向图,边的每次输入还要把反向的也赋值一次,还要用c++交阿
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator