1020.飞地的数量
分析:求不跟边界接壤的陆地的数量
思路一:深度优先遍历
- 先从四个侧边找陆地,然后进行深度优先遍历,把所有接壤的陆地(1)全部转换成海洋(0)
- 遍历整个图,统计所有陆地的数量。
class Solution {
public:
int direct[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int res=0;
void dfs(vector>&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=0 && nexty>& grid) {
int n=grid.size(),m=grid[0].size();
for(int i=0;i
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>&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=0 && nexty>& board) {
int n=board.size(),m=board[0].size();
for(int i=0;i
417.太平洋大西洋流水问题
思路一:深度优先遍历
- 分别从大西洋和太平洋一侧,倒着推得到两个数组
- 当两个数组都经过同一位置时,说明可以流向两边
class Solution {
public:
int direct[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void dfs(vector>&heights,vector>&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=0 && nexty> pacificAtlantic(vector>& heights) {
int n=heights.size(),m=heights[0].size();
vector>res;
vector>pacific(n,vector(m,false));//太平洋
vector>atlantic(n,vector(m,false));//大西洋
for(int i=0;i