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. VS2012中丢失ArcGIS模板的解决方法

    VS2012中丢失ArcGIS模板的解决方法 由于ArcGIS10.0(for .NET)默认是用VS2010作为开发工具的,所以在先安装VS2012后装ArcGIS10.0 桌面版及ArcObjec ...

  2. python基础之day2

    python基本数据类型 1.数字 int(整型)      在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647  在64位系统 ...

  3. ActionMapping

    在Struts中,ActionServlet只是任务的分派者,它依请求分配任务给其它的对象来执行,而分配的依据是请求的URI以及struts-config.xml的<action-mapping ...

  4. HDU3465 树状数组逆序数

    Life is a Line Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)T ...

  5. C++ 编写DLL文件给易语言调用

    摸索了两天了,终于解决了所有问题,在此跟大家分享. 需要三个文件,dll_demo.h.dll_demo.cpp.dll_dome.def 直接上代码: 头文件如下: #ifndef _DLL_DEM ...

  6. mui框架中底部导航的跳转1

    mui框架极大的方便了app的开发但是我们在做页面之间的切换时发现不能实现 a 链接的跳转,这是应为mui相关的一些控件是通过拦截a标签上的href来实现的,所以mui.js会阻止a标签上的href跳 ...

  7. Struts 2的数据校验

    既然说到了Struts 2的数据校验,我们该怎么去实现呢?又是通过什么来实现呢? 就让我带着大家一起来走进Struts 2的数据校验吧. 首先我们会想到在Stuts 2的登录案例中我们定义了一个Act ...

  8. Centos 编写 service 启动

    Centos 系统服务脚本目录: [html] view plaincopyprint?   /usr/lib/systemd/ 有系统(system)和用户(user)之分, 如需要开机没有登陆情况 ...

  9. VB.net 2010 AndAlso,OrElse和And,Or的区别

    '************************************************************************* '**模 块 名:VB.net 2010 AndA ...

  10. [Xamarin] 使用Webview 來做APP (转帖)

    有時候,企業要求的沒有這麼多,他原本可能官方網站就已經有支援Mobile Web Design 他只需要原封不動的開發一個APP 也或是,他只是要型錄型,或是問卷調查的型的APP,這時候透過類似像if ...