1.深度优先遍历每搜一次就进入递归调用自身
2.宽度优先遍历没有进行递归也就是一直搜索当前节点能到达的下一层节点直到节点搜索完时再搜索下一节点
使用邻接表
遍历:每个点只会被遍历一次
1.深度优先遍历。
尽可能往深了搜,当触底时回溯,直到把所有点全部搜过一遍。
2.广度优先遍历。
从根节点开始广搜,每次搜索把所有一层的点全部搜过一遍。
void add(int a,int b) {
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int dfs(int x) {
st[x]=true;
int size=0,sum=1;
for(int i=h[x]; i!=-1; i=ne[i]) {
int j=e[i];
if(st[j]) continue;
int s=dfs(j);
size=max(size,s);
sum+=s;
}
size=max(size,n-sum);
ans=min(size,ans);
return sum;
}