![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
BFS例题
只会写臭虫
这个作者很懒,什么都没留下…
展开
-
洛谷P1032 字串变换题解
BFS,设置一个结构体,将当前已被替换的字符串和步数放入队列,特别要注意当前串可能不只有一个子串,所以要用while循环扫完所有,注意while语句里的break一定要加上。#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<string...原创 2019-05-21 20:21:12 · 193 阅读 · 0 评论 -
洛谷P1141 迷宫题解(典型的BFS)
题目描述有一个仅由数字0与1组成的n×n格迷宫。若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。输入输出格式输入格式:第1行为两个正整数n,m。下面n行,每行n个字符,字符只可能是0或者1,字符之间没有空格。接下来m行,每行2个用空格分隔...原创 2019-05-23 22:31:36 · 884 阅读 · 0 评论 -
洛谷P1126 机器人搬重物(多状态BFS)
输入输出样例输入样例#1:9 100 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 0 1 00 0 0 1 0 0 0 0 0 00 0 1 0 0 0 0 0 0 00 0 0 0 0 0 1 0 0 00 0 0 0 0 1 0 0 0 00 0 0 1 1 0 0 0 0 00 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 1 0...原创 2019-05-23 23:37:44 · 226 阅读 · 0 评论 -
LeetCode 310. 最小高度树(求树的直径或者拓扑排序)
最开始我是利用的暴力解法,对每个节点进行bfs,求得树的最大高度,然后取最大高度的最小值,然后果不其然超时了。后来看了别人的博客,发现有两种思路:一、利用树的直径这道题求解的实际上是树直径中间的那一个节点或两个结点,若直径为奇数个结点,则根节点为最中间的那个结点;若为偶数个结点,则为最中间的那两个结点(具体怎么证明我也不清楚。。。)代码:class Solution {public: ...原创 2019-06-13 22:21:27 · 316 阅读 · 0 评论 -
LeetCode 773 滑动谜题(BFS)
这道题跟一般的BFS求最短路径不太一样,因为每一个状态是一个矩阵,而不是由一个元素的值或者两个元素的值决定的。所以这道题的做法是将这个2*3的状态转化为字符串。通过定位字符串中‘0’的位置,然后实行上下左右移动的操作。其他的就和普通的BFS模板题一样了。代码如下:class Solution {public: int slidingPuzzle(vector<vector<...原创 2019-06-18 21:55:56 · 868 阅读 · 0 评论 -
LeetCode847. 访问所有节点的最短路径
这题跟普通的bfs不一样,因为节点可以重复访问,所以就不能用一个一维的数组来标识节点是否访问,这道题比较巧妙的就是利用二进制的来表示某个节点的当前状态。或表示前一个状态已经访问过的1加上访问当前节点所对应的1,举个例子,若在f及之前已经访问了0,1节点,即表示的状态为0011,若v是3号节点(1000),则或的结果为1011(即访问v后已经访问了0,1,3号节点)。这样通过判断某个节点的状态是...原创 2019-06-18 23:10:14 · 813 阅读 · 0 评论 -
LeetCode 399. 除法求值(并查集+BFS)
把各个string看做顶点。然后a/b的值看做边。对于每个查询a/b,我们要求的就是从a到b的一条路径,答案就是这条路径上的边权之积。我用的是BFS代码如下:class Solution {public: unordered_set<string>st; //存放顶点的集合 map<pair<string,string>,double>mp...原创 2019-07-03 14:02:36 · 555 阅读 · 0 评论 -
POJ1753 Flip Game(状态压缩+BFS或DFS)
题意:给你一个4*4的棋盘,每个棋子非黑即白,翻一个棋子会带动它上下左右的棋子也翻过来,问至少多少次可以使棋盘全黑或者全白。分析:因为是至少翻多少次,我们就可以联想到利用BFS来做,因为棋盘只有16位,我们就以一个16位二进制数来存储当前棋盘的状态。当前棋盘的状态就类似普通bfs中的某个节点。从当前节点扩展到下一节点的方法就是以16个格子为中心进行翻转。代码:#include <st...原创 2019-06-30 13:36:33 · 157 阅读 · 0 评论 -
LeetCode 934. 最短的桥(DFS+BFS)
思路:先利用dfs或者bfs找到其中一个连通分量,并将这个连通分量里的格子设置为2,然后再利用bfs从这个连通分量中的结点开始扩展(将0的格子扩展为2),直到扩展到为1的格子结束,此时的路径最短。代码:class Solution {public: struct p{ int x,y,s; p(int xx,int yy,int ss){ ...原创 2019-07-05 19:20:57 · 574 阅读 · 0 评论