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);
}