您的位置:首页 > 其它

最短路模板。

2017-02-16 16:41 393 查看
纯粹是害怕自己忘掉记一遍。

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];
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: