- class Solution {
- public:
- int direct[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
- int res=0;
- void dfs(vector
int >>&grid,int x,int y){ - grid[x][y]=0;
- 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(grid[nextx][nexty]==1){
- grid[nextx][nexty]=0;
- dfs(grid,nextx,nexty);
- }
- }
- }
- }
- int numEnclaves(vector
int >>& grid) { - int n=grid.size(),m=grid[0].size();
- for(int i=0;i
- if(grid[i][0]==1) dfs(grid,i,0);//左侧边
- if(grid[i][m-1]==1) dfs(grid,i,m-1);//右侧边
- }
- for(int j=0;j
- if(grid[0][j]==1) dfs(grid,0,j);//上侧边
- if(grid[n-1][j]==1) dfs(grid,n-1,j);//下侧边
- }
- for(int i=1;i
-1;i++){//遍历整个图 - for(int j=1;j
-1;j++){ - if(grid[i][j]==1) res++;
- }
- }
- return res;
- }
- };
130.被围绕的区域
思路一:dfs
- 依然是从四个侧面把陆地深度优先遍历,然后改成 A 字符
- 然后遍历整个图,把剩余的陆地(必然被海水包裹)变为海水,A 字符变为陆地
- class Solution {
- public:
- int direct[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
- int res=0;
- void dfs(vector
char >>&board,char target,int x,int y) - {
- board[x][y]=target;
- res++;
- 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(board[nextx][nexty]=='O'){
- board[nextx][nexty]=target;
- dfs(board,target,nextx,nexty);
- }
- }
- }
- }
- void solve(vector
char >>& board) { -
- int n=board.size(),m=board[0].size();
- for(int i=0;i
- if(board[i][0]=='O') dfs(board,'A',i,0);//左侧边
- if(board[i][m-1]=='O') dfs(board,'A',i,m-1);//右侧边
- }
- for(int j=0;j
- if(board[0][j]=='O') dfs(board,'A',0,j);//上侧边
- if(board[n-1][j]=='O') dfs(board,'A',n-1,j);//下侧边
- }
- for(int i=0;i
- for(int j=0;j
- if(board[i][j]=='A') board[i][j]='O';//所有的A变为O
- else if(board[i][j]=='O') board[i][j]='X';//所有的O变为X
- }
- }
- }
- };
417.太平洋大西洋流水问题
思路一:深度优先遍历
- 分别从大西洋和太平洋一侧,倒着推得到两个数组
- 当两个数组都经过同一位置时,说明可以流向两边
- class Solution {
- public:
- int direct[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
- void dfs(vector
int >>&heights,vectorbool >>&visted,int x,int y){ - if(visted[x][y]) return;
- visted[x][y]=true;
- 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(heights[x][y]<=heights[nextx][nexty])//本来是从高到低,这是倒着推,所以低到高
- dfs(heights,visted,nextx,nexty);
- }
- }
- }
- vector
int>> pacificAtlantic(vectorint>>& heights) { - int n=heights.size(),m=heights[0].size();
- vector
int>>res; -
- vector
bool>>pacific(n,vector<bool>(m,false));//太平洋 - vector
bool>>atlantic(n,vector<bool>(m,false));//大西洋 -
- for(int i=0;i
- dfs(heights,pacific,i,0);//从左侧太平洋出发
- dfs(heights,atlantic,i,m-1);//从右侧大西洋出发
- }
-
- for(int j=0;j
- dfs(heights,pacific,0,j);//从上侧太平洋出发
- dfs(heights,atlantic,n-1,j);//从下侧大西洋出发
- }
-
- for(int i=0;i
- for(int j=0;j
- if(pacific[i][j] && atlantic[i][j])//从大西洋和太平洋都可以流过
- res.push_back({i,j});
- }
- }
- return res;
- }
- };
-
相关阅读:
大气环境一站式技能提升:SMOKE-CMAQ实践技术
stable diffusion本地部署教程
Python lambda 函数深度总结
公司新来一个同事,把网关系统设计的炉火纯青,万能通用,稳的一批。。
云安全-云原生k8s攻击点(8080,6443,10250未授权攻击点)
Matplotlib(三)通过plt.subplots创建子绘图
2023国庆自驾游:山东
剑指offer!年薪300万P9大佬揭秘Spring全家桶手册,刷完入职字节
木棍加工时间优化,代码精简
MIMO 从入门到精通 -科普篇2 - MIMO and Beamforming
-
原文地址:https://blog.csdn.net/Ricardo_XIAOHAO/article/details/133444385