int n;//表示n个点,从1到n标号
int s, t;//s为源点,t为终点
int d[N];//d[i]表示源点s到i的最短路
int p[N];//记录路径(记录前驱)
queue <int> q; 一个队列
bool vis[N];//vis[i] = 1表示点i在队列中
int spfa_bfs(int s)
{
queue<int> q;
memset(d, 0x3f, sizeof(d));
d[s] = 0;
memset(c, 0, sizeof(c));
memset(vis, 0, sizeof(vis));
q.push(s);
vis[s] = 1;
c[s] = 1;
int ok = 1;
while(!q.empty())
{
int x;
x = q.front();
q.pop();
vis[x] = 0;
for(int k = f[x]; k != 0; k = next[k])
{
int u = v[k];
if(d[x] + w[k] < d[y])
{
d[y] = d[x] + w[k];
if(!vis[y])
{
vis[y] = 1;
c[y]++;
q.push(y);
if(c[y] > nn)
{
return okk = 0;
}
}
}
}
}
return ok;
}
int spfa_dfs(int u)
{
vis[u] = 1;
for(int k = f[u]; k != 0; k = e[k].next)
{
int v = e[k].v, w = e[k].w;
if(d[u] + w < d[v])
{
d[v] = d[u] + w;
if(!vis[v]){
if(spfa_dfs(v))
{
return 1;
}
}
else{
return 1;
}
}
}
vis[u] = 0;
return 0;
}
spfa最短路
最新推荐文章于 2024-01-03 18:21:40 发布