dijstra 模板

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 int
const 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;
            }
    }
}


猜你喜欢

转载自blog.csdn.net/zl1085372438/article/details/53524933