dijstra 模板

来源:互联网 发布:淘宝口碑客服电话 编辑:程序博客网 时间:2024/05/15 23:54
int path[100005];int used[100005];int d[100005];vector<int> G[100005];int s,n;void dijstra(){    for(int i=0;i<n;i++)    {        path[i]=-1;        used[i]=0;        d[i]=100000000;    }    d[s]=0;    while(1)    {        int v=-1;        for(int u=0;u<n;u++)        {            if(used[u]==0 && ((v==-1)||d[u]<d[v]))            {                v=u;            }        }        if(v==-1) break;        used[v]=1;        for(int i=0;i<G[v].size();i++)           {            int u=G[v][i];            if(d[v]+1<d[u])            {                d[u]=d[v]+1;                path[u]=v;            }        }    }}
const int MAXN=1010;#define typec intconst typec INF=0x3f3f3f3f;//防止后面溢出,这个不能太大bool vis[MAXN];int pre[MAXN];void Dijkstra(typec cost[][MAXN],typec lowcost[],int n,int beg){    for(int i=0; i<n; i++)    {        lowcost[i]=INF;        vis[i]=false;        pre[i]=-1;    }    lowcost[beg]=0;    for(int j=0; j<n; j++)    {        int k=-1;        int Min=INF;        for(int i=0; i<n; i++)            if(!vis[i]&&lowcost[i]<Min)            {                Min=lowcost[i];                k=i;            }        if(k==-1)break;        vis[k]=true;        for(int i=0; i<n; i++)            if(!vis[i]&&lowcost[k]+cost[k][i]<lowcost[i])            {                lowcost[i]=lowcost[k]+cost[k][i];                pre[i]=k;            }    }}


0 0
原创粉丝点击