您的位置:首页 > 其它

最短路模板

2017-12-12 20:49 369 查看

Floyd

/*Floyd
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
for(int k=0; k<n; k++)
{
if(maps[j][k]>maps[j][i]+maps[i][k])
maps[j][k]=maps[j][i]+maps[i][k];
}
}
}
*/


Dijkstra

/*Dijkstra
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=1005;
int N,M,S;
int vis[maxn],cast[maxn],maps[maxn][maxn];
void dijkstra()
{
int i,j,minn,pos;
memset(vis,0,sizeof(vis));
vis[0]=1;
for(i=1; i<=n; i++)
cast[i] = maps[0][i];
for(i=1; i<=n; i++)
{
minn=INF;
for(j=1; j<=n; j++)
{
if(cast[j]<minn&&!vis[j])
{
pos=j;
minn=cast[j];
}
}
vis[pos]=1;
for(j=1; j<=n; j++)
{
if(cast[pos]+maps[pos][j]<cast[j]&&!vis[j])
cast[j]=cast[pos]+maps[pos][j];
}
}
}
*/


/*
int dijkstra()
{
int i,j,minn,pos;
memset(vis,0,sizeof(vis));
for(i=0; i<=N; i++)
cast[i]=(i==0?0:INF);
for(i=0; i<=N; i++)
{
minn=INF;
for(j=0; j<=N; j++)
{
if(cast[j]<minn&&!vis[j])
{
pos=j;
minn=cast[j];
}
}
vis[pos]=1;
if(pos==S)
return cast[pos];
for(j=0; j<=N; j++)
{
if(cast[pos]+maps[pos][j]<cast[j]&&!vis[j])
cast[j]=cast[pos]+maps[pos][j];
}
}
return -1;
}
*/


SPFA

/*
void spfa(int s)
{
queue <int> q;
for(int i=1;i<=n;i++)
dist[i]=inf;
memset(vis,false,sizeof(vis));
q.push(s);
dist[s]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=false;
for(int i=head[u];i!=-1;i=e[i].next)
{
int v=e[i].to;
if(dist[v]>dist[u]+e[i].w)
{
dist[v]=dist[u]+e[i].w;
if(!vis[v])
{
vis[v]=true;
q.push(v);
}
}
}
}
}
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: