LC广度优先搜索
BFS
你别教我打游戏
直面困难,重视过程,追求结果,淡忘过去。
展开
-
LeetCode 417. 太平洋大西洋水流问题 (一道很有意思的多源BFS问题)
太平洋大西洋水流问题太平洋、大西洋依次从终点开始拓展到起点,也就是从低到高地拓展。都能够拓展到的点,就是符合要求的。const int dx[] = {-1,0,1,0};const int dy[] = {0,1,0,-1};class Solution {public: typedef pair<int,int> P; vector<vector<int>> pacificAtlantic(vector<vector<int&g原创 2020-08-04 12:01:05 · 127 阅读 · 0 评论 -
LeetCode 542. 01 矩阵 (经典的多源BFS求最短路)
01 矩阵一句话,所有为0的点都是等价的起点,一开始就全部入队。const int dx[] = {-1,0,1,0};const int dy[] = {0,1,0,-1};class Solution {public: typedef pair<int,int> P; vector<vector<int>> updateMatrix(vector<vector<int>>& mat) { int原创 2020-08-04 11:33:35 · 150 阅读 · 0 评论 -
LeetCode 1368. 使网格图至少有一条有效路径的最小代价 ( 双端队列BFS(01 BFS)、优先队列BFS(Dijkstra))
使网格图至少有一条有效路径的最小代价迪杰斯塔拉算法想了一会,觉得用优先队列做,写着写着发现其实就是Dijkstra,不过平时做的图都是由边集或者是邻接矩阵给出的,但是这里点与点之间的连接关系其实是四个相邻方向,边权要么是0要么是1。const int dx[] = {0,0,1,-1};const int dy[] = {1,-1,0,0};class Solution {public: struct Node{ int x,y,cost; Node(原创 2020-08-04 10:42:18 · 156 阅读 · 0 评论 -
LeetCode 1298. 你能从盒子里获得的最大糖果数 (模拟、BFS)
你能从盒子里获得的最大糖果数class Solution {public: int maxCandies(vector<int>& status, vector<int>& candies, vector<vector<int>>& keys, vector<vector<int>>& containedBoxes, vector<int>& initialBoxes) {原创 2020-08-03 20:35:10 · 193 阅读 · 0 评论 -
LeetCode 994. 腐烂的橘子 (多个等价起点的BFS)
腐烂的橘子在一开始需要把多个等价源点一起入队。const int dx[] = {-1,0,1,0};const int dy[] = {0,1,0,-1};class Solution {public: typedef pair<int,int> P; bool isOk(vector<vector<int>>& a){ int cnt = 0; for(int i=0;i<m;i++){ .原创 2020-07-28 20:33:10 · 99 阅读 · 0 评论 -
LeetCode 1284. 转化为全零矩阵的最少反转次数 (BFS)
转化为全零矩阵的最少反转次数和力扣 773 题十分相似。const int dx[] = {-1,0,1,0};const int dy[] = {0,1,0,-1};class Solution {public: typedef vector<vector<int>> V; int vis[1000] = {0}; int m, n, dpt = 0; int getID(const V& v){ int p = 1原创 2020-07-28 20:15:16 · 194 阅读 · 0 评论 -
LeetCode 279. 完全平方数(DP、记忆化搜索、宽度优先搜索、数学)
完全平方数DP其实是最好想的,宽搜其次。时间复杂度:O(n3/2)O(n^{3/2})O(n3/2)class Solution {public: // 记忆化搜索 int vis[1000000] = {0}; int numSquares0(int n) { if(vis[n]){ return vis[n]; } if(n==0) return 0; int res = 1e9;原创 2020-07-28 18:02:30 · 96 阅读 · 0 评论 -
LeetCode 529. 扫雷游戏 (BFS玩玩小游戏)
扫雷游戏 const int dx[] = {-1,0,1,0,-1,-1,1,1};const int dy[] = {0,1,0,-1,1,-1,1,-1};class Solution {public: typedef pair<int,int> P; queue<P> q; bool vis[51][51] = {0}; vector<vector<char>> updateBoard(vector<vec原创 2020-07-28 17:53:07 · 70 阅读 · 0 评论 -
LeetCode 773. 滑动谜题 (BFS、状态如何转移)
滑动谜题const int dx[] = {-1,0,1,0};const int dy[] = {0,1,0,-1};class Solution {public: typedef vector<vector<int>> V; int vis[600000] = {0} , target; queue<V> q; int getID(const V& v){ int sum = 0, p = 1;原创 2020-07-28 17:14:44 · 96 阅读 · 0 评论