BFS
需要借助队列,反复取出队首节点,然后依次访问与队首节点相邻的且未加入队列的节点加入队列,直至队列为空
邻接矩阵存储
int n , G[N][N];
bool vis[N] = {false};
void BFS(int u)
{
queue<int> q;
q.push(u);
vis[u] = true;
while(!q.empty())
{
int u = q.front();
q.pop();
for(int v = 0; v < n; v ++)
{
if(!vis[v] && G[u][v] != INF)
{
q.push(v);
vis[v] = true;
}
}
}
}
void BFSTraverse()
{
for(int u = 0; u < n; u ++)
{
if(!vis[u]) BFS(u);
}
}
邻接表存储
vector<int> Adj[N];
int n;
bool vis[N] = {false};
void BFS(int u)
{
queue<int> q;
q.push(u);
vis[u] = true;
for(int v = 0; v < Adj[u].size(); v ++)
{
if(!vis[v] && Adj[u][v] != INF)
{
q.push(v);
vis[v] = true;
}
}
}
void BFSTraverse()
{
for(int u = 0; u < n; u ++)
{
if(!vis[u]) BFS(u);
}
}
DFS
从当前节点出发一直向下走,直到该路径不能前进后返回上一个岔路口并继续向下走
邻接矩阵存储
int n, G[N][N];
bool vis[N];
void DFS(int u. int depth)
{
vis[u] = true;
/*对u进行操作*/
for(int v = 0; v < n; v ++)
{
if(!vis[v] && G[u][v] != INF)
{
DFS(v, depth + 1);
}
}
}
void DFSTraverse()
{
for(int u = 0; u < n; u ++)
{
if(!vis[u]) DFS(u, 1);
}
}
邻接表存储
int n;
vector<int> Adj[N];
bool vis[N] = {false};
void DFS(int u, int depth)
{
vis[u] = true;
/*对u进行访问操作*/
for(int i = 0; i < Adj[u].size(); v ++)
{
int v = Adj[u][i];
if(!vis[v]) DFS(v, depth + 1);
}
}
void DFSTraverse()
{
for(int u = 0; u < n; u ++)
{
if(!vis[u]) DFS(u, 1);
}
}