图论_单源最短路模板
Flyod
int g[N][N]
for (int k = 1; k <= n; k ++ )
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= n; j ++ )
g[i][j] = min(g[i][j],g[i][k]+g[k][j]);
SPFA
int h[N],w[M],ne[M],e[M],idx;
int dist[N];
int n,p,m;
bool st[N];
void add(int a,int b,int c)
{
e[idx] = b,w[idx] = c,ne[idx] = h[a],h[a] = idx++;
}
int spfa(int s){
memset(dist,0x3f,sizeof dist);
dist[s] = 0;
queue<int> q;
st[s] = 1;
q.push(s);
while(q.size())
{
int t = q.front(); q.pop();
st[t] = 0;
for(int i = h[t];~i;i = ne[i])
{
int j = e[i];
if(dist[j]>dist[t]+w[i])
{
dist[j]=dist[t]+w[i];
if(!st[j])
{
q.push(j);
st[j] = 1;
}
}
}
}
}
dijkstra
int w[N][N],level[N];
int dist[N];
int n,p,m;
bool st[N];
void dijkstra()
{
memset(dist, 0x3f, sizeof dist);
//memset(st, 0, sizeof st);
dist[0] = 0;
for(int i = 1;i<=n+1;i++)
{
int t = -1;
for(int j = 0;j<=n;j++)
if(!st[j]&&(t==-1 || dist[j] <dist[t] )) // min connect
t = j;
st[t] = 1;
//cout<<t<<' ';
for(int j = 1;j<=n;j++)
dist[j] = min(dist[j],dist[t]+w[t][j]); //renew connect to t
}
}
本文来自博客园,作者:InsiApple,转载请注明原文链接:https://www.cnblogs.com/InsiApple/p/16100036.html