岛屿

200. 岛屿的个数

匿名 (未验证) 提交于 2019-12-02 23:26:52
'1' (陆地)和 '0' (水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入: 11110 11010 11000 00000 输出: 输入: 11000 11000 00100 00011 输出: 3 文章来源: https://blog.csdn.net/umbrellasoft/article/details/89305264

leetcode:岛屿的个数(java,考察点:深度优先遍历)

匿名 (未验证) 提交于 2019-12-02 21:35:18
题目 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入: 11110 11010 11000 00000 输出: 1 示例 2: 输入: 11000 11000 00100 00011 输出: 3 ˼· 深度优先遍历,遍历二维数组,当遇到'1'时,进行深度优先遍历 每次遍历完都置为'0',或者true....等符号 计数,寻找下一个‘1’ java class Solution { public int numIslands(char[][] grid) { if (grid == null || grid.length == 0) { return 0; } int rows = grid.length; int cols = grid[0].length; int count = 0; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { // 注意char if (grid[i][j] == '1') { count++; dfsSearch(grid, i, j, rows, cols); } } } return count; } // 每遇到'1

LeetCode | 200. 岛屿数量

こ雲淡風輕ζ 提交于 2019-12-02 18:03:37
原题 ( Medium ):     给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。    思路:递归    这题类型跟我们之前做过的一题 单词搜索 类似。所以我在看到这题之后,就想到了可以用与之相同的思路:建立一个代表搜索方向的数组,在当前坐标下,如果往某个方向移动一格是符合一定条件的,就往该方向移动一格,且是递归形式的移动。在这里条件就是不超越边界,且该方向上有岛屿可供移动,且是未被访问过的。如果4个方向都尝试完毕,就可以返回了。为了防止重复访问已经被访问过的岛屿格,需要一个访问数组做记录。在递归过程中,每前进一格(符合条件才会前进),就设置该格已被访问。 1 int xy[4][4] = { { 1,0 },{ 0,-1 },{ -1,0 },{ 0,1 } }; //代表搜索方向的数组 2 3 void helper(vector<vector<int>>& grid, int x, int y, vector<vector<bool>>& visited) 4 { 5 visited[y][x] = true; 6 for (int i = 0; i < 4; i++) 7 { 8 //以当前网格起点,尝试其四周能能否移动,能就继续递归移动

2019E0_F 多多岛

久未见 提交于 2019-12-02 10:31:03
多多岛 题目 知识点:树,古典概率 多多群岛是一个群岛,由n个岛屿构成,不同的岛屿之间由桥梁连接,一共有n-1个桥梁,任意两个岛屿一定联通。从一座岛屿跨过一座桥梁到另一个岛屿的时间是1。 多多群岛在只有一座桥与其他岛屿相连的岛屿上设有餐厅,就餐时间时,游客会选择距离他最近的餐厅就餐。 假设就餐时间时,一个游客在每座岛屿的概率相等,那么请问他到达餐厅花费时间的期望是多少。 输入 第一行一个正整数n表示岛屿的个数(2≤n<105) 接下来n-1行,每行两个整数x,y,表示第x座岛和第y座岛之间有一座桥梁 (1≤x,y≤n) 输出 每组数据输出一行,保留4位小数 输入样例 2 1 2 输出样例 0.0000 思路 水题。 首先,你要认出来这是一个树。n个点,n-1条边,任意两点之间联通。 然后,你要认识到餐厅都是叶节点。在只有一座桥与其他岛屿相连的岛屿上设有餐厅。 那么这个问题就是每个点到最近叶节点最短路径长的和除以n。 把叶节点都放到队列里做一个bfs就ok了。 代码 # include <cstdlib> # include <algorithm> # include <iostream> # include <vector> # include <queue> using namespace std ; typedef long long ll ; const int ms =

Leecode - 岛屿的最大面积--来玩贪吃蛇吧:)

谁说胖子不能爱 提交于 2019-12-01 07:52:26
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。 找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。) 示例 1: [[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,1,1,0,0,1,0,1,0,0], [0,1,0,0,1,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,1,1,0,0,0,0]] 对于上面这个给定矩阵应返回 6。注意答案不应该是11,因为岛屿只能包含水平或垂直的四个方向的‘1’。 示例 2: [[0,0,0,0,0,0,0,0]] 对于上面这个给定的矩阵, 返回 0。 grid = [[1,0,1], [0,0,1],] row = len(grid) col = len(grid[0]) max_size = 0 def getArea(i,j): # 递归终止条件 if i < 0 or i >=row or j <0 or j>=col

OpenJudge 海贼王之伟大航路 DFS+状态压缩

坚强是说给别人听的谎言 提交于 2019-11-30 13:31:29
描述 “我是要成为海贼王的男人!”,路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的艰险历程。 路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着“唯一的大秘宝”——ONE PIECE)。而航程中间,则是各式各样的岛屿。 因为伟大航路上的气候十分异常,所以来往任意两个岛屿之间的时间差别很大,从A岛到B岛可能需要1天,而从B岛到A岛则可能需要1年。当然, 任意两个岛之间的航行时间虽然差别很大,但都是已知的。 现在假设路飞一行从罗格镇(起点)出发,遍历伟大航路中间所有的岛屿(但是已经经过的岛屿不能再次经过),最后到达拉夫德鲁(终点)。 假设他们在岛上不作任何的停留,请问,他们最少需要花费多少时间才能到达终点? 输入 输入数据包含多行。 第一行包含一个整数N(2 < N ≤ 16),代表伟大航路上一共有N个岛屿(包含起点的罗格镇和终点的拉夫德鲁)。其中,起点的编号为1,终点的编号为N。 之后的N行每一行包含N个整数,其中,第i(1 ≤ i ≤ N)行的第j(1 ≤ j ≤ N)个整数代表从第i个岛屿出发到第j个岛屿需要的时间t(0 < t < 10000)。第i行第i个整数为0。 输出 输出为一个整数,代表路飞一行从起点遍历所有中间岛屿(不重复)之后到达终点所需要的最少的时间。 样例输入 样例输入1: 4 0 10 20 999 5 0 90 30 99 50 0

openjudge 海贼王之伟大航路

佐手、 提交于 2019-11-30 13:29:14
4979:海贼王之伟大航路 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 “ 我是要成为海贼王的男人!”,路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的艰险历程。 路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着“唯一的大秘宝”—— ONE PIECE )。而航程中间,则是各式各样的岛屿。 因为伟大航路上的气候十分异常,所以来往任意两个岛屿之间的时间差别很大,从 A 岛到 B 岛可能需要 1 天,而从 B 岛到 A 岛则可能需要 1 年。当然,任意两个岛之间的航行时间虽然差别很大,但都是已知的。 现在假设路飞一行从罗格镇(起点)出发,遍历伟大航路中间所有的岛屿(但是已经经过的岛屿不能再次经过),最后到达拉夫德鲁(终点)。假设他们在岛上不作任何的停留,请问,他们最少需要花费多少时间才能到达终点? 输入 输入数据包含多行。 第一行包含一个整数N(2 < N ≤ 16),代表伟大航路上一共有N个岛屿(包含起点的罗格镇和终点的拉夫德鲁)。其中,起点的编号为1,终点的编号为N。 之后的N行每一行包含N个整数,其中,第i(1 ≤ i ≤ N)行的第j(1 ≤ j ≤ N)个整数代表从第i个岛屿出发到第j个岛屿需要的时间t(0 < t < 10000)。第i行第i个整数为0。 输出 输出为一个整数

岛屿的数量

喜夏-厌秋 提交于 2019-11-29 19:21:30
一、题目 岛屿的个数 中文English 给一个 01 矩阵,求不同的岛屿的个数。 0 代表海,1 代表岛,如果两个 1 相邻,那么这两个 1 属于同一个岛。我们只考虑上下左右为相邻。 样例 样例 1: 输入: [ [1,1,0,0,0], [0,1,0,0,1], [0,0,0,1,1], [0,0,0,0,0], [0,0,0,0,1] ] 输出: 3 样例 2: 输入: [ [1,1] ] 输出: 1 二、题解 分析:采用深度优先搜索的方法,对于位置(i,j)的数,若为1,则为岛屿,则对该位置进行深度优先遍历,使得其四周为1的置为0,并递归下去,类似于深度搜索。将该位置四周的为1的变为0的意思就是把它们看成与该位置为同一个岛屿,则再遍历的时候就不会计它们的数 三、代码 class Solution { public : /** * @param grid: a boolean 2D matrix * @return: an integer */ void dfs ( vector < vector < bool >> & grid , int x , int y ) { if ( x < 0 || x >= grid . size ( ) ) return ; if ( y < 0 || y >= grid [ 0 ] . size ( ) ) return ; if ( !

LeetCode 463 岛屿的周长

房东的猫 提交于 2019-11-29 12:09:14
给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。 网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。 岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。 示例 : 输入: [[0,1,0,0], [1,1,1,0], [0,1,0,0], [1,1,0,0]] 输出: 16 解释: 它的周长是下面图片中的 16 个黄色的边: 解法一 最常规的解法,如果走到1的位置,我们便判断该位置的情况,先附一个初值,然后根据每一种特殊情况减去1,得到的结果添加到总的结果中: class Solution: def islandPerimeter(self, grid: List[List[int]]) -> int: res = 0 for i in range(len(grid)): for j in range(len(grid[0])): if grid[i][j]==1: plus = 4 if i>0 and grid[i-1][j]==1: plus-=1 if i<len(grid)-1 and grid[i+1][j]==1: plus-=1 if

消失的岛屿 /希尼(爱尔兰)

别来无恙 提交于 2019-11-29 02:42:18
曾经我们设想自己永久地流落 在它的青翠山岭和无沙海滨之间 我们祈祷、守望,熬过孤绝的夜晚, 曾经我们拾漂木,垒灶台 并吊起我们的大锅像一个苍穹, 岛屿在我们脚下破碎像一个浪头。 唯有当我们“最后一刻”拥抱 大地,它给我们的支撑才显得坚固。 我只相信那里发生的都是幻觉。 来源: https://www.cnblogs.com/lhsguaigege/p/11441149.html