bfs思路总结

(1)将初始状态加入队列

(2)初始状态出队,进行节点扩展。可能是状态转移,列出状态转移方程

(3)在进行扩展中,需要判断节点不要重复扩展。基本思路是设立visited[]数组,标记状态是否被访问过。将状态用一个整数表示,整数则可以是数组下标,该数组下标对应的数组元素的值即是状态是否被访问的标志。即:状态-》整数-》数组下标-》数组元素的值,参考八数码中的康托展开。

(4)在扩展中,判断是否到达目标状态,如果是,则跳出循环,得出结果,问题有解;若果不是,重复(3),直到队列为空,问题无解。

时间: 2024-10-13 23:23:24

bfs思路总结的相关文章

ACM/ICPC 之 BFS范例(ZOJ2913)

通过一道经典BFS例题阐述BFS思路 ZOJ2913-Bus Pass 题意:找一个center区域,使得center到所有公交线路最短,有等距的center则输出id最小的. 题解:经典的BFS,由公交线路最多只经过10*20个区域,而总区域数可达10^5个,因此应该从公交线路通过队列一层层向外扩展,最后判断一次center的位置即可. 1 //选定一个center使得其到所有公交线路最短 2 //对所有公交线路进行BFS(公交线路比其他区域少得多) 3 //Time:150Ms Memory

算法与数据结构基础 - 广度优先搜索(BFS)

BFS基础 广度优先搜索(Breadth First Search)用于按离始节点距离.由近到远渐次访问图的节点,可视化BFS 通常使用队列(queue)结构模拟BFS过程,关于queue见:算法与数据结构基础 - 队列(Queue) 最直观的BFS应用是图和树的遍历,其中图常用邻接表或矩阵表示,例如 LeetCode题目 690. Employee Importance: // LeetCode 690. Employee Importance/* class Employee { publi

PAT Advanced 1034 Head of a Gang (30) [图的遍历,BFS,DFS,并查集]

题目 One way that the police finds the head of a gang is to check people's phone calls. If there is a phone call between A and B, we say that A and B is related. The weight of a relation is defined to be the total time length of all the phone calls mad

poj3501Escape from Enemy Territory||hdu2337Escape from Enemy Territory

题目链接: 点我点我 点我点我 题目为: Escape from Enemy Territory Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2410   Accepted: 661 Description A small group of commandos has infiltrated deep into enemy territory. They have just accomplished their mis

图的表示、广度优先搜索、深度优先搜索

1.图的表示 a.邻接矩阵:适合稠密图(|E|接近|V|2) //用二维数组表示邻接矩阵 int G[|V|][|V|]; //初始化 for(int i=0;i<|V|;i++){ for(int j=0;j<|V|;j++){ if( (i,j) in E){ G[i][j] = 1;//or G[i][j] = weight[i][j]; } else if(i==j){ G[i][j] = 0; } else{ G[i][j] = MAX; } } } b.邻接表:适合稀疏图(|E|远

[C++]LeetCode: 87 Letter Combinations of a Phone Number

题目: Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is given below. Input:Digit string "23" Output: ["ad", "ae"

[bzoj1059] [ZJOI2007] 矩阵游戏 (二分图匹配)

小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选择 矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换 对应格子的颜色)游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑 色.对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本就是无解的!!于是小Q

HDU 1043 Eight八数码解题思路(bfs+hash 打表 IDA* 等)

题目链接 https://vjudge.net/problem/HDU-1043 经典的八数码问题,学过算法的老哥都会拿它练搜索 题意: 给出每行一组的数据,每组数据代表3*3的八数码表,要求程序复原为初始状态 思路: 参加网站比赛时拿到此题目,因为之前写过八数码问题,心中暗喜,于是写出一套暴力bfs+hash,结果TLE呵呵 思路一:bfs+hash(TLE) 1 #include <cstdio> 2 #include <cstring> 3 #include <queu

Z1. 广度优先搜索(BFS)解题思路

/** BFS 解题思路 特点:从某些特定的节点开始,感染相邻的节点; 被感染的节点,再感染其相邻的节点,以此类推. 题目常见于数据结构包括 二维数组.树.图 **/ /** 1). 二维数组特定节点感染相邻的节点,即上下左右四个方向,可设定变化数组如下 int[] dr = new int[]{-1, 0, 1, 0}; int[] dc = new int[]{0, -1, 0, 1}; 2). 二维数组特定节点感染包围它的节点,即八个方法, 可设定变化数组如下: int[] dr = ne