深圳南山工厂网站建设费用,那个网站可以查询美做空基金,typecho转wordpress,阿里云一键建站网站算法学习——LeetCode力扣图论篇1 797. 所有可能的路径
797. 所有可能的路径 - 力扣#xff08;LeetCode#xff09;
描述
给你一个有 n 个节点的 有向无环图#xff08;DAG#xff09;#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出#xff08;不要求按特…算法学习——LeetCode力扣图论篇1 797. 所有可能的路径
797. 所有可能的路径 - 力扣LeetCode
描述
给你一个有 n 个节点的 有向无环图DAG请你找出所有从节点 0 到节点 n-1 的路径并输出不要求按特定顺序
graph[i] 是一个从节点 i 可以访问的所有节点的列表即从节点 i 到节点 graph[i][j]存在一条有向边。
示例
示例 1
输入graph [[1,2],[3],[3],[]] 输出[[0,1,3],[0,2,3]] 解释有两条路径 0 - 1 - 3 和 0 - 2 - 3
示例 2 输入graph [[4,3,1],[3,2,4],[3],[4],[]] 输出[[0,4],[0,3,4],[0,1,3,4],[0,1,2,3,4],[0,1,4]]
提示
n graph.length 2 n 15 0 graph[i][j] n graph[i][j] ! i即不存在自环 graph[i] 中的所有元素 互不相同 保证输入为 有向无环图DAG
代码解析
class Solution {
public:vectorvectorint result;vectorint path;void dfs(vectorvectorint graph , int indnx){if(indnx graph.size()-1) {path.push_back(graph.size()-1);result.push_back(path);path.pop_back();return;}for(int i0 ; igraph[indnx].size() ;i){path.push_back(indnx);dfs(graph,graph[indnx][i]);path.pop_back();}return;}vectorvectorint allPathsSourceTarget(vectorvectorint graph) {dfs(graph,0);return result;}
};200. 岛屿数量
200. 岛屿数量 - 力扣LeetCode
描述
给你一个由 ‘1’陆地和 ‘0’水组成的的二维网格请你计算网格中岛屿的数量。
岛屿总是被水包围并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外你可以假设该网格的四条边均被水包围。
示例
示例 1
输入grid [ [“1”,“1”,“1”,“1”,“0”], [“1”,“1”,“0”,“1”,“0”], [“1”,“1”,“0”,“0”,“0”], [“0”,“0”,“0”,“0”,“0”] ] 输出1
示例 2
输入grid [ [“1”,“1”,“0”,“0”,“0”], [“1”,“1”,“0”,“0”,“0”], [“0”,“0”,“1”,“0”,“0”], [“0”,“0”,“0”,“1”,“1”] ] 输出3
提示
m grid.length n grid[i].length 1 m, n 300 grid[i][j] 的值为 ‘0’ 或 ‘1’
代码解析
深度优先搜索dfs
class Solution {
public:int result 0;int m 0 ,n0;int dir[4][2] {0,1, 0,-1 , -1,0 , 1,0};void dfs(vectorvectorchar grid , vectorvectorbool path , int x , int y){for(int i0 ; i4 ;i){int next_x x dir[i][0];int next_y y dir[i][1];if(next_x0||next_xm||next_y0||next_yn) continue;else if( path[next_x][next_y] false grid[next_x][next_y] 1) { path[next_x][next_y] true;dfs(grid,path,next_x,next_y);}}return;}int numIslands(vectorvectorchar grid) {m grid.size();n grid[0].size();vectorvectorbool path( m , vectorbool( n ,false) );for(int i0 ; im ;i){for(int j0 ; jn ;j){if(path[i][j] false grid[i][j] 1){result;path[i][j] true;dfs(grid,path,i,j);}}}return result;}
};广度优先搜索bfs
class Solution {
public:int result 0;int m 0 ,n0;int dir[4][2] {0,1, 0,-1 , -1,0 , 1,0};void bfs(vectorvectorchar grid , vectorvectorbool path , int x , int y){queuepairint,int my_que;my_que.push({x,y});path[x][y] true;while(my_que.size() ! 0){pairint,int cur my_que.front();my_que.pop();for(int i0 ; i4 ;i){int next_x cur.first dir[i][0];int next_y cur.second dir[i][1];if(next_x0||next_xm||next_y0||next_yn) continue;else if( path[next_x][next_y] false grid[next_x][next_y] 1) { my_que.push({next_x,next_y});path[next_x][next_y] true;}}}return;}int numIslands(vectorvectorchar grid) {m grid.size();n grid[0].size();vectorvectorbool path( m , vectorbool( n ,false) );for(int i0 ; im ;i){for(int j0 ; jn ;j){if(path[i][j] false grid[i][j] 1){result;path[i][j] true;bfs(grid,path,i,j);}}}return result;}
};695. 岛屿的最大面积
695. 岛屿的最大面积 - 力扣LeetCode
描述
给你一个大小为 m x n 的二进制矩阵 grid 。
岛屿 是由一些相邻的 1 (代表土地) 构成的组合这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0代表水包围着。
岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿则返回面积为 0 。
示例
示例 1
输入grid [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]] 输出6 解释答案不应该是 11 因为岛屿只能包含水平或垂直这四个方向上的 1 。 示例 2
输入grid [[0,0,0,0,0,0,0,0]] 输出0
提示
m grid.length n grid[i].length 1 m, n 50 grid[i][j] 为 0 或 1
代码解析
class Solution {
public:int dir[4][2] {0,1,0,-1,-1,0,1,0};int m0,n0;int result 0;int tmp_result 0;void dfs(vectorvectorint grid , vectorvectorbool path , int x ,int y){for(int i0 ; i4 ;i){int next_x x dir[i][0];int next_y y dir[i][1];if(next_x0 || next_xm || next_y0 || next_yn) continue;if(grid[next_x][next_y] 1 path[next_x][next_y] false){tmp_result;path[next_x][next_y] true;dfs(grid,path,next_x,next_y);}}}int maxAreaOfIsland(vectorvectorint grid) {m grid.size();n grid[0].size();vectorvectorbool path(m , vectorbool( n , false ));for(int i0 ; im ;i){for(int j0 ; jn ;j){if(grid[i][j] 1 path[i][j] false){path[i][j] true;tmp_result 1;dfs(grid,path,i,j);if(tmp_result result) result tmp_result;}}}return result;}
};