int dis[maxn],vis[maxn],pre[maxn],n;
struct node///to为点的编号,d为边权或者最短路
{
int to,d;
}f,ne;
struct cmp
{
bool operator() (node a,node b)
{
return a.d>b.d;
}
};
vector <node> edge[maxn];
void dijkstra(int u)///u为起点
{
int i,j;
priority_queue <node,vector<node>,cmp> q;
dis[u]=0;
f.d=0;
f.to=u;
q.push(f);
while(!q.empty())
{
f=q.top();
q.pop();
if(vis[f.to]) continue;
vis[f.to]=1;
for(i=0;i<edge[f.to].size();i++)
{
ne.to=edge[f.to][i].to;
if(!vis[ne.to]&&dis[ne.to]>edge[f.to][i].d+dis[f.to])
{
dis[ne.to]=edge[f.to][i].d+dis[f.to];
ne.d=dis[ne.to];
pre[ne.to]=f.to;
q.push(ne);
}
}
}
}
int main()
{
for(i=1;i<=n;i++)
{
dis[i]=INF;
vis[i]=0;
edge[i].clear();
}
}
dijkstra 模板
最新推荐文章于 2024-08-04 08:21:42 发布