BFS
BFS
风有点大
good good study!!!
展开
-
【计蒜客】蒜头君回家
题目 思路 分为两段,先从S找到p,再从T找到p,然后取这两段距离和的最小值就是最小步数。 为了可以重复使用bfs函数,减少代码,我们使用一个三维数组cnt的第三位来表示没取到q和取到了q前后两个状态。 注意1:不能直接从s搜索到最近的一个p,然后从T搜索到一个最近的p,然后将两个距离相加,因为不能保证这两个搜索到的p是同一个p 注意2:一开始的时候,要把cnt的所有值最大,memset(cnt,INF,sizeof(cnt)),原因是因为题中要求最小步数,如果某个p被#围住,那么他的cnt[][][0]原创 2021-04-11 17:12:40 · 217 阅读 · 0 评论 -
【计蒜客】吃糖的时间
题目 思路 只要找到传到最后一个人的时候花费了多少时间,在这个时间基础上加上吃糖时间即可。 注意在存储关系的时候,关系是双向的 代码 #include<iostream> #include<queue> #include<vector> using namespace std; vector<pair<int,int> >a;//存储关系数,存储的时候记得双向存储,因为关系是双向的,如果不双向存,那么就变成有向图了,有些起始点遍历不到,比如 1-原创 2021-04-11 10:23:34 · 566 阅读 · 0 评论 -
【计蒜客】三阶平面魔方
题目 思路 用bfs,分别模拟每一步的转动情况 代码 #include<iostream> #include<queue> #include<map> using namespace std; map<string,bool> ma;//标记 struct node{ string statu; int step; }first,last; queue<node> q; string next_dir(int i,string原创 2021-04-10 20:37:25 · 291 阅读 · 0 评论 -
【计蒜客】乳草的侵占
题目 思路 使用bfs一圈一圈的遍历即可,小伙计????需要注意最后要取ans的最大值,???? 代码 代码一: #include<iostream> #include<queue> using namespace std; char mp[105][105];//存储地图 bool vis[105][105];//标记 int ans[105][105];//记录步数 int x,y,mx,my;//输入 int x1,y1;//队头元素的坐标 int cnt;//.的个数 in原创 2021-04-09 11:12:49 · 128 阅读 · 0 评论 -
【计蒜客】密码锁
题目 代码 #include<bits/stdc++.h> using namespace std; string s1,s2; bool vis[11][11][11][11]; struct node{ int num[4],step; }first,last; //frst需要解的密码 ,last 正确密码 int main(){ cin>>s1>>s2; for(int i=0;i<s1.size();i++){原创 2021-04-08 19:31:13 · 420 阅读 · 0 评论 -
【计蒜客】一维坐标的移动
题目 思路 由于每次可以往前一步,往后一步,或者向前跳跃两步,那么我们可以使用bfs依次搜索,当第一次到达B点时,就是最小步数 代码 写法一; #include<bits/stdc++.h> #include<queue> using namespace std; //now表示当前在哪个位置了 //step表示当前走了多少步数了 int n,A,B,now,step; bool vis[5005]; queue<pair<int,int>> q; int原创 2021-04-08 16:45:03 · 297 阅读 · 0 评论 -
【计蒜客】求解迷宫最短路径
思路 前面我们已经接触过了迷宫游戏,粗学会了如何使用dfs来解决迷宫最短路问题。用dfs求解迷宫最短路有一个很大的缺点,要枚举所有可能的路径,读入的地图一旦很大,可能的搜索方案数量会非常多,用dfs搜索显然效率会很低。 我们可以借助bfs求解迷宫游戏。于bfs分层搜索,因此,第一次搜索到终点的时候,当前搜索的层数就是最短路径的长度。 代码 #include <iostream> #include <string> #include <queue> using namesp原创 2021-04-07 20:11:31 · 260 阅读 · 0 评论 -
【计蒜客】BFS-----广度优先搜索
什么是 广度优先搜索,又称宽度优先搜索,简称bfs,我们以后都会用bfs来表示广度优先搜索。与深度优先搜索不同的是,广度优先搜索会先将与起始点距离较近的点搜索完毕,再继续搜索较远的点,而深搜却是沿着一个分支搜到最后。 bfs从起点开始,优先搜索离起点最近的点,然后由这个最近的点扩展其他稍近的点,这样- -层一 层的扩 展,就像水波扩散一 样。 如图所示: 上图用DFS得到的序列为:A B E F C D G 上图用BFS得到的序列为:A B C D E F G 可见,再BFS中,搜索主要是按照分层的,分别从原创 2021-04-07 19:29:53 · 219 阅读 · 0 评论 -
【计蒜客】数据结构-----队列
队列是什么 队列(queue)是一种线性的数据结构。只允许从队列的前端(front)进行删除操作,而在后端(rear)进行插入操作。插入的一端我们称为队尾,删除的一端我们称为队首。插入叫入队,删除叫出队。 性质:先进先出 队列有哪些基本操作 入队:push() 出队:pop() 访问队首元素:front() 访问队尾元素:back() 判断队列是否为空:empty() 统计队列中元素个数:size() 注意事项 队列没用clear()函数。 在使用front()和pop()函数前,必须使用empty(原创 2021-04-07 11:13:31 · 269 阅读 · 0 评论