DFS:暴搜,找到一个可行解答即可
BFS:最短路、最少方案
树形的DFS模板
void dfs(int u)
{
for(int i=h[u];i!=-1;i=ne[i])
{
int j=e[i];
dfs(j);
/*
其他操作
...
*/
}
}
BFS模板
int q[N],d[N]//队列q[N],路径d[N]。d需要初始化为-1,表示没有遍历过
int bfs()
{
//队列初始状态
int head=0,tail=-1;
q[0]= ; tail++; //添加第一个元素
memset(d,-1,sizeof(d));
d[1]=0; //第一个元素最短距离为0
while(head<=tail) //当队列非空
{
//取队头
auto t=q[head++];
//扩展所有领点
for(int ;;) //按照存储方式扩展
{
if(之前x没有遍历过)
d[x]=d[t]+1; //距离加一
q[++tail]=x; //队列添加新元素
}
}
}
main()
{
cout<<bfs()<<endl;//通常返回路径最小值,或最少方案
}