Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

stl 的heap是不是这么写,知道的人过来一下,谢谢了

Posted by ACM06019 at 2006-10-27 21:49:02 on Problem 3013
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator