先上代码:
BFS:
bool vis[MAXN];
int dis[MAXN];
void bfs(int s)
{
queue<int> Q;
Q.push(s);
vis[s] = true;
while(!Q.empty())
{
int u = Q.front();
Q.pop();
for(int e = first[u]; e; e = nxt[e])
{
int v = go[e];
if(vis[v]) continue;
dis[v] = dis[u] + 1;
vis[v] = true;
Q.push(v);
}
}
}
SPFA:
int dis[MAXN];
bool vis[MAXN];
void SPFA(int s)
{
for(int i = 1; i <= n; ++i) dis[i] = inf;
dis[s] = 0;
queue<int> Q;
Q.push(s);
vis[s] = true;
while(!Q.empty())
{
int u = Q.front();
Q.pop();
vis[u] = false;
for(int e = first[u]; e; e = nxt[e])
{
int v = go[e];
if(dis[v] > dis[u] + val[e])
{
dis[v] = dis[u] + val[e];