深度优先遍历
int dfs(int u) // 保证进入dfs为有效且未访问状态,在进入dfs之后标记
{
st[u] = true; // 标记
for (int i = h[u]; i != -1; i = ne[i])
{
int j = e[i];
if (!st[j]) dfs(j); // 如果是无效状态或访问过,不进入
}
}
广度优先遍历
queue<int> q;
st[1] = true; // 表示1号点已经被遍历过
q.push(1);
while (q.size())
{
int t = q.front();
q.pop();
for (int i = h[t]; i != -1; i = ne[i])
{
int j = e[i];
if (!st[j])
{
st[j] = true; // 表示点j已经被遍历过,保证压入的都被标记了
q.push(j);
}
}
}