Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

11110
11010
11000
00000

Answer: 1

Example 2:

11000
11000
00100
00011

Answer: 3

大意就是给个图,找寻所有的子图。注意两点:1.该二维数组并不一定是方阵;2.数组有可能是空的情况

代码如下:

 public class Solution {
class pos {
public int x;
public int y; public pos(int x, int y) {
this.x = x;
this.y = y;
}
} public int numIslands(char[][] grid) {
if (grid.length == 0)
return 0;
int count = 0;
int xl = grid.length, yl = grid[0].length;
int[][] visit = new int[xl][yl];
LinkedList<pos> lp = new LinkedList<Solution.pos>();
pos cur;
for (int i = 0; i < xl; i++) {
for (int j = 0; j < yl; j++) {
if (grid[i][j] == '0')
continue;
if (grid[i][j] == '1' && visit[i][j] == 1)
continue;
cur = new pos(i, j);
lp.push(cur);
while (lp.size() > 0) {
cur = lp.poll();
visit[cur.x][cur.y] = 1;
if (cur.x + 1 < xl && grid[cur.x + 1][cur.y] == '1'
&& visit[cur.x + 1][cur.y] != 1) {
lp.push(new pos(cur.x + 1, cur.y));
}
if (cur.x - 1 >= 0 && grid[cur.x - 1][cur.y] == '1'
&& visit[cur.x - 1][cur.y] != 1) {
lp.push(new pos(cur.x - 1, cur.y));
}
if (cur.y + 1 < yl && grid[cur.x][cur.y + 1] == '1'
&& visit[cur.x][cur.y + 1] != 1) {
lp.push(new pos(cur.x, cur.y + 1));
}
if (cur.y - 1 >= 0 && grid[cur.x][cur.y - 1] == '1'
&& visit[cur.x][cur.y - 1] != 1) {
lp.push(new pos(cur.x, cur.y - 1));
}
}
++count;
}
} return count;
} public static void main(String[] args) {
char[][] grid1 = { { '1', '1', '1', '1', '0' },
{ '1', '1', '0', '1', '0' }, { '1', '1', '0', '0', '0' },
{ '0', '0', '0', '0', '0' } }, grid2 = {
{ '1', '1', '0', '0', '0' }, { '1', '1', '0', '0', '0' },
{ '0', '0', '1', '0', '0' }, { '0', '0', '0', '1', '1' } }, grid3 = {
{ '1', '1', '1' }, { '0', '1', '0' }, { '1', '1', '1' } };
Solution s = new Solution();
System.out.println(s.numIslands(grid1));
System.out.println(s.numIslands(grid2));
System.out.println(s.numIslands(grid3));
}
}

我利用的是广度优先遍历,也可尝试深度优先遍历

Java 图的遍历-LeetCode200的更多相关文章

  1. Java实现 洛谷 P3916 图的遍历(反向DFS+记忆化搜索)

    P3916 图的遍历 输入输出样例 输入 4 3 1 2 2 4 4 3 输出 4 4 3 4 import java.io.BufferedReader; import java.io.IOExce ...

  2. JAVA集合迭代遍历和特性介绍

    数组.集合:都是一种容器,用一个对象管理多个对象:数组不能自动增长:只能存放同类型的元素 集合能自动扩容:部分集合允许存放不同类型的元素: 1.List: 有顺序的,允许存放重复的元素: 遍历:for ...

  3. 图的遍历——BFS

    原创 裸一篇图的BFS遍历,直接来图: 简单介绍一下BFS遍历的过程: 以上图为例子,从0开始遍历,访问0,按大小顺序访问与0相邻的所有顶点,即先访问1,再访问2: 至此顶点0已经没有作用了,因为其本 ...

  4. 图的遍历——DFS

    原创 图的遍历有DFS和BFS两种,现选用DFS遍历图. 存储图用邻接矩阵,图有v个顶点,e条边,邻接矩阵就是一个VxV的矩阵: 若顶点1和顶点5之间有连线,则矩阵元素[1,5]置1,若是无向图[5, ...

  5. 数据结构(三十二)图的遍历(DFS、BFS)

    图的遍历和树的遍历类似.图的遍历是指从图中的某个顶点出发,对图中的所有顶点访问且仅访问一次的过程.通常有两种遍历次序方案:深度优先遍历和广度优先遍历. 一.深度优先遍历 深度优先遍历(Depth_Fi ...

  6. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  7. Java中HashMap遍历的两种方式

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

  8. 转!! Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  9. 【转】Java中如何遍历Map对

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

随机推荐

  1. HDU(1285)—确定比赛名次

    /*最近都在复习期末了...好久没做题,都快没智商了*/   有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后 ...

  2. win7安装oracle 时容易出的问题

    Windows7下安装Oracle11G.10G,都会提示如下信息 正在检查操作系统要求... 要求的结果: 5.0,5.1,5.2,6.0 之一 实际结果: 6.1 检查完成.此次检查的总体结果为: ...

  3. 奇怪的UnexpectedRollbackException异常

    今天在使用一个原来常用的功能的时候,突然发现在某些场景下会报异常,内容如下: 通过断点调试发现一路都很顺畅,就是在从controller层返回前段的时候会报该异常,没办法,只能通过排除法定位问题,后来 ...

  4. Filter 数组过滤函数精解示例

    '************************************************************************* '**模 块 名:Filter 数组过滤函数精解示 ...

  5. Get-FilewithExtension

    1: <# 2: 用途: 3: 根据指定的路径和文件类型查找出文件,显示其完整路径以及大小 4: 使用方法: 5: Get-FilewithExtension -path path1,path2 ...

  6. Windows系统上的.Net版本和.NETFramework的C#版本

    前言 注:本文内容摘自维基百科,用于在墙内时当作笔记看. WinForm 需要.Net最低版本 2.0 WPF需要的.Net最低版本 3.0 (Win7及之上版本自带) C#版本 版本 语言规格 日期 ...

  7. ASP.NET Identity 2新增双重认证、帐号锁定、防伪印章功能并修复了一些bug

    Microsoft最近发布了ASP.NET Identity 2,该版本支持双重认证.帐号锁定以及防伪印章功能,还增强了用户帐号和索引.此外新版本还包含一个改进的密码验证器并修复了一些bug. 借助于 ...

  8. 剑指Offer面试题:26.字符串的排列

    一.题目:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 二 ...

  9. 相识HTML5 canvas

    Canvas是HTML的API,我们可以用它在网页中实时的来生成图像. 文章导读 1.必备技能 2.用于画图的函数 例子: -会话气泡-    -心形-    -钟表-      -星球里的星星- - ...

  10. 朴素贝叶斯(NB)复习总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 贝叶斯分类算法是统计学的一种分类方法,其分类原理就是利用贝叶斯公式根据某 ...