首页 > 代码库 > Dijkstra普通算法及优先队列优化

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

#include<stdio.h>#include<iostream>#define maxv 100#define inf 0x3fffffffusing 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 0x3fffffffusing namespace std;struct edge{    int to;    int cost;};typedef pair<int,int> P;//cost vint  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));            }        }    }}

 

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