【N^2迪杰斯特拉】

void finddist(int &s)
{
	int ans=2000000000;
	for(int i=1;i<=N;i++)
	if(visit[i]==0)
	{
		if(dist[i]<ans)
		{
			ans=dist[i];
			s=i;
		}
	}
	visit[s]=1;
}
void Dijkstra(int s)
{
	dist[s]=0;
	for(int k=1;k<=N-1;k++)
	{
		finddist(s);
		for(edge *p=Graph[s].first;p;p=p->next)
			if(dist[s]+p->w<dist[p->to]) dist[p->to]=dist[s]+p->w; 
	}
}
</pre><pre code_snippet_id="511464" snippet_file_name="blog_20141107_3_8518630" name="code" class="cpp">调用记得初始化
void CSH()
{
	memset(visit,0,sizeof(visit));
	for(int i=0;i<maxn;i++)
	dist[i]=1000000000;
}
void solve()
{
	CSH();
	Dijkstra(1);
}

 

你可能感兴趣的:(【N^2迪杰斯特拉】)