最短路模板。

来源:互联网 发布:淘宝卖家发票怎么办 编辑:程序博客网 时间:2024/06/07 01:37

纯粹是害怕自己忘掉记一遍。

1 Floyd计算多源最短路问题。

void floyd(){    for(int i=1;i<=n;++i) //扫一遍中间点    {        for(int j=1;j<=n;++j)//扫一遍起点        {            for(int k=1;k<=k;++k)//扫一遍所有终点            {                if(map[j][k]>map[j][i]+map[i][k])                 map[j][k]=map[j][i]+map[i][k];            }        }            }    }

2 SPFA 单源,队列

void Spfa(){    for(int i=1;i<=n;i++)    {        dis[i]=inf;        vis[i]=0;    }    queue<int>que;    vis[start]=1; dis[start]=0;    que.push(start);    while(!que.empty())    {        int temp=que.front();        que.pop();        for(int i=1;i<=n;i++)        {            if(dis[temp]+map[temp][i]<dis[i])             {               dis[i]=map[temp][i]+dis[temp];                  if(vis[i]==0)             {               vis[i]=1;               que.push(i);             }           }         }       vis[temp]=0;     }}

3 dijkstra 这个我是最早接触的,但对我的幼小心灵造成很大的打击所以用的就很少。

void Dijkstra(){    for(int i=1;i<=n;i++)    {        dis[i]=inf; vis[i]=0;     }    dis[start]=0;    for(int i=1;i<=n;i++)    {        int pos;int min=inf;        for(int j=1;j<=n;j++)        {            if(!vis[i]&&dis[i]<min)            {                 min=dis[i];              pos=i;            }        }        vis[pos]=1;        for(int k=1;k<=n;k++)        {            if(dis[k]>dis[pos]+map[pos][k])            dis[k]=dis[pos]+map[pos][k];        }    }}




0 0
原创粉丝点击