bfs思想:
每到一个岔口就同时走多个方向。
bfs应用的问题:
1.可行性问题(能否通过迷宫)
2.连通块个数
bfs特点:
走出迷宫的时间最短
bfs思想:
1.起点入队列
2.不断产生子节点
由队首元素产生子结点,满足要求的子结点进入队列;
结果就产生在子结点中;
bfs程序需要定义什么:
1.一个队列,用来存点的坐标,父结点坐标,和编号信息
编号信息仅用于需要知道最短步数,连通块个数等题目
父结点坐标仅用于需要输出最短路径等题目
bfs框架:
void bfs(){
// 1.准备队列
int q[1000],head=0,tail=0;
// 2.起点入队列
tail++;
q[tail]=/*起点*/;
// 3.遍历产生子结点
while(head<tail){
head++;
// 得到队首信息;
/*队首结点产生子结点*/ for(int i=/*所有方案*/){
/*判断此方案的结点是否成立*/ if(/*子结点成立*/){
tail++;
q[tail]=/*子结点*/;
// 标记掉此子结点(避免回走);
/*判断此结点是否终点*/ if(/*子结点为重点*/){
/*输出结果,退出bfs*/;
}
}
}
}
}