dijkstra模板
2017-09-13 17:21
441 查看
用dijkstra算法时,求最短路,不能存在负权边;求最长路时,不能存在正权边(((贪心思想;
代码:
struct edge
{
int to,val,next;
}e[maxm];
int vis[maxn],head[maxn],in[maxn];
ll dis[maxn];
int n,m,cnt;
void add(int u,int v,int val)
{
e[cnt] = (edge){v,val,head[u]};
head[u] = cnt++;
}
priority_queue<pii> pq;
void dijkstra(int s)
{
while(!pq.empty())
pq.pop();
pq.push(make_pair(0,s));
for(int i = 0;i<=n+1;i++)
vis[i] = 0;
while(!pq.empty())
{
pii p = pq.top();
int u = p.second;
//cout<<head[u]<<endl;
pq.pop();
if(vis[u])
continue;
vis[u] = 1;
for(int i = head[u];i!=-1;i = e[i].next)
{
//cout<<i<<endl;
int v = e[i].to;
if(!vis[v])
{
if(dis[v]<dis[u]+e[i].val)
{
dis[v] = dis[u]+e[i].val;
// cout<<dis[v]<<endl;
pq.push(make_pair(dis[v],v));
}
}
}
}
}
代码:
struct edge
{
int to,val,next;
}e[maxm];
int vis[maxn],head[maxn],in[maxn];
ll dis[maxn];
int n,m,cnt;
void add(int u,int v,int val)
{
e[cnt] = (edge){v,val,head[u]};
head[u] = cnt++;
}
priority_queue<pii> pq;
void dijkstra(int s)
{
while(!pq.empty())
pq.pop();
pq.push(make_pair(0,s));
for(int i = 0;i<=n+1;i++)
vis[i] = 0;
while(!pq.empty())
{
pii p = pq.top();
int u = p.second;
//cout<<head[u]<<endl;
pq.pop();
if(vis[u])
continue;
vis[u] = 1;
for(int i = head[u];i!=-1;i = e[i].next)
{
//cout<<i<<endl;
int v = e[i].to;
if(!vis[v])
{
if(dis[v]<dis[u]+e[i].val)
{
dis[v] = dis[u]+e[i].val;
// cout<<dis[v]<<endl;
pq.push(make_pair(dis[v],v));
}
}
}
}
}
相关文章推荐
- Dijkstra模板
- UVA - 11374 Airport Express (Dijkstra模板+枚举)
- uva 11374 最短路+记录路径 dijkstra最短路模板
- ACM模板--邻接表 无向图 Prim Kruskal Dijkstra
- Dijkstra 算法最短路模板
- Dijkstra模板求单源点最短路径
- hdu 2544 最短路 dijkstra模板
- Dijkstra模板[kuangbin]
- HDU 2544 最短路——简单的模板题 dijkstra
- 【模板】Dijkstra \ Floyed \ Prim
- 最短路-dijkstra与floyd的邻接矩阵模板示例
- poj1502 MPI Maelstrom(dijkstra模板)个人理解
- Kruskal/Prim/Dijkstra模板
- poj-1797-Heavy Transportation dijkstra 水模板
- [洛谷]P3371 单源最短路径模板 Dijkstra
- ACM模板--邻接矩阵 无向图 Prim Kruskal Dijkstra
- [有向图Dijkstra模板]Silver Cow Party
- dijkstra()模板
- HDU 1874 畅通工程续 (dijkstra模板)
- 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板