- class Solution {
- public:
- vector
int>>res; - vector<int>mid={0};
- void backtrace(vector
int >>&graph,int starti,int n){ - if(mid.back()==n-1){//遍历到一条路径时
- res.push_back(mid);
- return;
- }
- if(starti==n) return;//超出二维下标
- for(int i=0;i
size();i++){ - mid.push_back(graph[starti][i]);
- backtrace(graph,graph[starti][i],n);
- mid.pop_back();//回溯
- }
- }
- vector
int>> allPathsSourceTarget(vectorint>>& graph) { - int n=graph.size();
- backtrace(graph,0,n);
- return res;
-
- }
- };
- class Solution {
- public:
- int direct[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
- void dfs(vector
char >>&grid,vectorbool >>&visted,int x,int y){ - for(int i=0;i<4;i++){//从四个方向进行深度优先搜索
- int nextx = x+direct[i][0];
- int nexty = y+direct[i][1];
- if(nextx
size() && nextx>=0 && nexty0].size() && nexty>=0){//当未越界时 - if(grid[nextx][nexty]=='1' && !visted[nextx][nexty]){//当前陆地没有被遍历过时
- visted[nextx][nexty]=true;
- dfs(grid,visted,nextx,nexty);
- }
- }
- }
-
- }
- int numIslands(vector
char >>& grid) { - int n=grid.size(),m=grid[0].size();
- int res=0;
- vector
bool>>visted(n,vector<bool>(m,false)); - for(int i=0;i
//对所有位置进行遍历 - for(int j=0;j
- if(grid[i][j]=='1' && !visted[i][j]){//当前陆地没有被遍历过时
- visted[i][j]=true;
- res++;
- dfs(grid,visted,i,j);//遍历连接的陆地
- }
- }
- }
- return res;
- }
- };
思路二:广度优先遍历
- 1.首先遍历所有位置
- 2.遇到没有遍历到的陆地,res 自增,并且进入广度优先遍历
- 3.广度优先遍历:把遍历到的坐标标记后,直接放入栈中,然后在栈中一层一层的进行遍历
- class Solution {
- public:
- int direct[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
- void bfs(vector
char >>&grid,vectorbool >>&visted,int x,int y){ - queue
int,int>>que; - que.push(make_pair(x,y));
- visted[x][y]=true;//加入栈就是已经遍历
- while(!que.empty()){
- pair<int,int> cur=que.front();//获取栈顶组合
- que.pop();
- int curx=cur.first;
- int cury=cur.second;
- for(int i=0;i<4;i++){//从四个方向的第一层进行遍历
- int nextx=curx+direct[i][0];
- int nexty=cury+direct[i][1];
- //防止越界
- if(nextx>=0 && nextx
size() && nexty>=0 && nexty0].size()){ - if(grid[nextx][nexty]=='1' && !visted[nextx][nexty]){
- que.push(make_pair(nextx,nexty));//放入当前层,下次遍历下一层
- visted[nextx][nexty]=true;
- }
- }
- }
-
- }
- }
- int numIslands(vector
char >>& grid) { - int n=grid.size(),m=grid[0].size();
- int res=0;
- vector
bool>>visted(n,vector<bool>(m,false)); - for(int i=0;i
//对所有位置进行遍历 - for(int j=0;j
- if(grid[i][j]=='1' && !visted[i][j]){//当前陆地没有被遍历过时
- visted[i][j]=true;
- res++;
- bfs(grid,visted,i,j);//遍历连接的陆地
- }
- }
- }
- return res;
- }
- };
695.岛屿的最大面积
思路一:广度优先搜索
- 1.遍历所有位置
- 2.当前位置为陆地并且没有被遍历过时,进入广度优先遍历
- 3.广度优先遍历:每次遍历到一块新的陆地时,mid 自增,最后返回mid
- 4.通过 mid 更新最大面积
- class Solution {
- public:
- int direct[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
- int bfs(vector
int >>&grid,vectorbool >>&visted,int x,int y){ - queue
int,int>>que; - que.push(make_pair(x,y));
- visted[x][y]=true;
- int mid=1;//初始只有一个岛屿
- while(!que.empty()){
- pair<int,int>cur=que.front();
- que.pop();
- int curx=cur.first;
- int cury=cur.second;
- for(int i=0;i<4;i++){
- int nextx=curx+direct[i][0];
- int nexty=cury+direct[i][1];
- if(nextx>=0 && nextx
size() && nexty>=0 && nexty0].size()){ - if(!visted[nextx][nexty] && grid[nextx][nexty]==1){
- mid++;//遍历到新的陆地面积自增
- que.push(make_pair(nextx,nexty));
- visted[nextx][nexty]=true;
- }
- }
- }
- }
- return mid;
- }
- int maxAreaOfIsland(vector
int >>& grid) { - int n=grid.size(),m=grid[0].size();
- vector
bool>>visted(n,vector<bool>(m,false)); - int res=0;
- for(int i=0;i
- for(int j=0;j
- if(!visted[i][j] && grid[i][j]==1){
- int mid=bfs(grid,visted,i,j);//获取当前岛屿面积
- if(mid>res) res=mid;//更新最大面积
- }
- }
- }
- return res;
- }
- };
思路二:深度优先遍历
- 1.遍历所有元素
- 2.遍历到新的陆地时,先标记访问过,再进入深度优先遍历
- 3.往四个方向进行遍历,遍历到新的陆地时计数自增
- 4.深度优先搜索结束时,更新最大面积(更新完后注意计数值赋值为1)
- class Solution {
- public:
- int direct[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
- int res=0;
- int mid=1;
- void dfs(vector
int >>&grid,vectorbool >>&visted,int x,int y){ - for(int i=0;i<4;i++){
- int nextx=x+direct[i][0];
- int nexty=y+direct[i][1];
- //越界控制
- if(nextx>=0 && nextx
size() && nexty>=0 && nexty0].size()){ - if(!visted[nextx][nexty] && grid[nextx][nexty]==1){//遍历到新的陆地时
- visted[nextx][nexty]=true;
- mid++;//面积自增
- dfs(grid,visted,nextx,nexty);//进入深度优先搜索
- }
- }
- }
- }
- int maxAreaOfIsland(vector
int >>& grid) { - int n=grid.size(),m=grid[0].size();
- vector
bool>>visted(n,vector<bool>(m,false)); - for(int i=0;i
- for(int j=0;j
- if(!visted[i][j] && grid[i][j]==1){
- visted[i][j]=true;
- dfs(grid,visted,i,j);//进入深度优先搜索
- if(mid>res) res=mid;
- mid=1;//记录面积值重新赋值
- }
- }
- }
- return res;
- }
- };
-
相关阅读:
Ubuntu 20.04.5安装无线网卡RTL8821CE驱动
程序员的数学课开篇词 数学,编程能力的营养根基
OpenFeign使用示例
【LeetCode高频SQL50题-基础版】打卡第7天:第36~40题
Codeforces Round #816 (Div. 2)补题(A-E)
黏菌优化算法SMA(Matlab完整代码实现)
基于SSM的彩妆小样售卖商城
python机器学习融合模型:Stacking与Blending(附代码)
BeanUtils.copyProperties使用分析
java116-arraylist集合实现类
-
原文地址:https://blog.csdn.net/Ricardo_XIAOHAO/article/details/133410714
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU