bfs

来源:互联网 发布:知乎怎么添加关注话题 编辑:程序博客网 时间:2024/06/09 13:55

bfs (广搜)

利用队列:先将初始状态添加到队列里,此后从队列的最前端不断取出状态,将相邻但尚未访问的状态加入队列,直至队列被取空或找到问题的解。

搜索顺序:距离初始状态由近及远的顺序

应用:最短路径,最少操作

/* Vs 起点  Vd 终点 */bool BFS(Node& Vs, Node& Vd){//常用结构体queue<Node> Q;Node Vn, Vw;int i;//用于标记,当vis[i][j]==true时,说明节点访问过bool vis[MAXL][MAXL];//四个方向int dir[][2] = {{0, 1}, {1, 0},{0, -1}, {-1, 0}};//初始状态将起点放进队列QQ.push(Vs);vis[Vs.x][Vs.y] = true;//设置节点已经访问过了!while (!Q.empty()){//队列不为空,继续搜索!//取出队列的头VnVn = Q.front();Q.pop();for(i = 0; i < 4; ++i){Vw = Node(Vn.x+dir[i][0], Vn.y+dir[i][1]);//计算相邻节点if (Vw == Vd){//找到终点了!......//处理,记录路径 return true;//返回}if (isValid(Vw) && !vis[Vw.x][Vw.y]){//Vw是一个合法的节点并且未访问 Q.push(Vw);//加入队列Qvis[Vw.x][Vw.y] = true;//标记已访问 }}}return false;//无解}
再做两道题,熟悉后把dfs ,bfs 放一起

0 0
原创粉丝点击