您的位置:首页 > 其它

Dijkstra普通算法及优先队列优化

2017-02-03 16:51 441 查看
#include<stdio.h>
#include<iostream>
#define maxv 100
#define inf 0x3fffffff
using namespace std;

int cost[maxv][maxv];
int d[maxv];
bool used[maxv];
int V;

void dijkstra(int s)
{
for(int i=0;i<v;i++) d[i]=inf;
d[s]=0;
fill(used,used+v,false);

while(true)
{
int v=-1;
for(int u=0;u<V;u++)
{
if(!used[u]&&(v==-1||d[u]<d[v])) v=u;
}
if(v=-1) break;
used[v]=true;
for(int u=0;u<V;u++)
{
if(d[u]>d[v]+cost[v][u])
d[u]=d[v]+cost[v][u]
}
}
}


#include<iostream>
#include<stdio.h>
#include<queue>
#define maxv 1000
#define inf 0x3fffffff
using namespace std;

struct edge
{
int to;
int cost;
};

typedef pair<int,int> P;//cost v
int  V;
vector<edge>G[maxv];
int d[maxv];
void difkstra(int s)
{
priority_queue <P,vector<P>,greater<P> >que;
fill(d,d+V,inf);
d[s]=0;
que.push(P(0,s));
while(!que.empty())
{
P p=que.top();que.pop();
int v=p.second;
for(int i=0;i<G[v].size();i++)
{
edage e=G[v][i];
if(d[e.to]>d[v]+e.cost)
{
d[e.to]=d[v]+e.cost;
que.push(P(d[e.to],e.to));
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: