| ||||||||||
| 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 | |||||||||
stl 的heap是不是这么写,知道的人过来一下,谢谢了bool cmp(const Edge & a, const Edge & b)
{
return a.wt > b.wt;
}
void Insert(int a, int b, int c)
{
Node * p, * q;
p = map[a];
q = new Node;
q->adjvex=b;
q->wt=c;
q->next=p;
map[a]=q;
p = map[b];
q = new Node;
q->adjvex=a;
q->wt=c;
q->next=p;
map[b]=q;
}
void Dijkstra()
{
int u;
Node * p;
memset(dist,-1,sizeof(dist));
memset(vis,0,sizeof(vis));
for (Len=0,p=map[0]; p; p=p->next)
{
dist[p->adjvex]=p->wt;
heap[Len].adj=p->adjvex;
heap[Len++].wt=p->wt;
}
make_heap(heap,heap+Len,cmp);
dist[0]=0;
vis[0]=1;
for (; Len;)
{
for (; Len && vis[heap[0].adj]; )pop_heap(heap,heap+Len--,cmp);
if (Len == 0)
{
break;
}
u=heap[0].adj;
vis[u]=1;
pop_heap(heap,heap+Len--,cmp);
for (p=map[u]; p; p=p->next)
{
if ( ! vis[p->adjvex] && (dist[p->adjvex] < 0 || dist[p->adjvex] > dist[u]+p->wt))
{
dist[p->adjvex]=dist[u]+p->wt;
heap[Len].adj=p->adjvex;
heap[Len++].wt=dist[p->adjvex];
push_heap(heap,heap+Len,cmp);
}
}
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator