LeetCode——695. 岛屿的最大面积

岛屿的最大面积

  • 题目
  • 思路1
  • 代码
  • 结果

题目

给定一个包含了一些 0 和 1 的非空二维数组 grid 。

一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。

找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)

思路1

利用广搜,每次搜到的,就将面积加一,最终等待当前搜索队列为空,也就表明某一个岛屿被完全搜索了!这个时候,再与结果进行比较,两者相较取较大值即可!

代码

import java.util.LinkedList;
import java.util.Queue;

// 等待搜索的元素
class Element
{
    int x;
    int y;

    public Element(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}
class Solution {
    int ans=0; 
    // 全局地图
    int map[][]=new int[50][50];
    // 全局标记数组
    int visited[][]=new int[50][50];
    // 方向数组
    int direction[][]={{0,1},{1,0},{0,-1},{-1,0}};
    // 地图的行
    int row=0;
    // 地图的列
    int column=0;
    // 搜索队列
    Queue<Element> queue =new LinkedList<>();
    
    public int maxAreaOfIsland(int[][] grid) {
        row=grid.length;
        column= grid[0].length;
        for (int i=0;i<row;++i)
        {
            for (int j=0;j<column;++j)
            {
                map[i][j]=grid[i][j];
                visited[i][j]=0;
            }
        }

        for (int i=0;i<row;++i)
        {
            for (int j=0;j<column;++j)
            {
             // 当找到一个没有被访问过的节点并且全局数组标记为1,即是发现了一个从来没有被搜索过的岛屿,那么就进行一次广搜
                if (map[i][j]==1 && visited[i][j]==0)
                {
                    queue.add(new Element(i,j));
                    visited[i][j]=1;
                    bfs();
                }
            }
        }
        return ans;
    }

// 广搜
    private void bfs()
    {
        int count=0; // 当前岛屿的面积
        while (!queue.isEmpty())
        {
            Element temp= queue.poll();
            ++count; 
            int t_x=0;
            int t_y=0;
            for (int i=0;i<4;++i) // 往上下左右四个方向进行搜索
            {
                t_x=temp.x+direction[i][0];
                t_y= temp.y+direction[i][1];
                if (check(t_x,t_y)) // 符合条件的就直接加入搜索队列并且将其标记为已访问
                {
                    queue.add(new Element(t_x,t_y));
                    visited[t_x][t_y]=1;
                }
            }
        }
        ans=ans>count?ans:count;
    }

    private boolean check(int x, int y)
    {
        //        横坐标不越界       纵坐标不越界
        return x>=0 && x<row && y>=0 && y<column && map[x][y]==1 && visited[x][y]==0;
    }
}

结果

LeetCode——695. 岛屿的最大面积_第1张图片
速度不算很快,目前没有什么好思路!先暂时这样子写!

你可能感兴趣的:(LeetCode)