B.最大岛屿(dfs)
题目描述:
神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等。加勒比海盗,你知道吧?杰克船长驾驶着自己的的战船黑珍珠1号要征服各个海岛的海盜,最后成为海盗王。 这是一个由海洋、岛屿和海盗组成的危险世界。面对危险重重的海洋与诡谲的对手,如何凭借智慧与运气,建立起一个强大的海盗帝国。
杰克船长手头有一张整个海域的海图,上面密密麻麻分布着各个海屿的位置及面积。他想尽快知道整个海域共有多少岛屿以及最大岛屿的面积。
【约束条件】
①若一个陆地八个方向之一(上、下、左、右、左上、右上、左下、右下)的位置也是陆地,则视为同一个岛屿。
② 假设第一行,最后一行,第一列,最后一列全为0.
③ 1<M, N≤500 1<T≤100000
输入
第1行: M N T 表示海域的长,宽及一个单位表示的面积大小
接下来有M行 ,每行有N个01组成的序列以及其中穿插一些空格。0表示海水,1表示陆地,其中的空格没用,可以忽略掉。
输出
输出一行,有2个整数,一个空格间隔,表示整个海域的岛屿数,以及最大岛屿的面积
样例输入
8 16 99
00000000 00000000
0000110011000000
0001111000111000
0000000 00 0000000
00111 111000001 10
001110000 0000000
0100001111 111100
0000000000000000
样例输出
5 990
题意描述:找出有多少组8个方向之一相连的1,并找出最长的一组1的个数乘以t后就是面积。
程序代码:
#include<stdio.h>
void dfs(int x,int y);
int m,n,max;
int ans=0;
long long q;
int a[510][510];
int main()
{int i,j,sum,t;while(scanf("%d%d",&m,&n)!=EOF){max=0;scanf("%d",&t);sum=0;for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%1d",&a[i][j]);for(i=0;i<m;i++)for(j=0;j<n;j++)if(a[i][j]==1){ans=0;dfs(i,j);sum++;} q=(long long)t*max;printf("%d %lld\n",sum,q); }return 0;
}
void dfs(int x,int y)
{ans++;int tx,ty,i,j,k;int next[8][2]={1,0, 0,1, -1,0, 0,-1, 1,1, -1,-1, 1,-1, -1,1};a[x][y]=0;for(k=0;k<8;k++){tx=x+next[k][0];ty=y+next[k][1];if(tx<0||tx>m-1||ty<0||ty>n-1)continue;if(a[tx][ty]==1)dfs(tx,ty);}if(ans>max)max=ans;return;
}
B.最大岛屿(dfs)相关推荐
- leetcode day 2 【1905. 统计子岛屿】 BFS/DFS
解题思路 BFS 找到grid2中的每一座岛屿[暴力搜索整个grid矩阵],对每座岛屿BFS,过程中check岛屿格子是否在grid1中为岛屿. class Solution:def countSub ...
- [蓝桥杯2018初赛]全球变暖-dfs,bfs,连通块
解题思路: bfs:遍历所有未遍历过的陆地,通过bfs计算出当前位置连通陆地的数量cnt,以及被淹没陆地的数量bound,若cnt == bound表示完整淹没的一个岛屿 dfs:将连通块全部标记,如 ...
- leetcode - 统计封闭岛屿的数目
有一个二维矩阵 gridgridgrid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其 ...
- python里怎么使用snip_MacOS下好用的截图软件snip
scala shuffle val arr = (0 to 100).map(_ * 1d) /// 下面这一步只能用to不能用until,scala里面实现返回的两个Range继承路径不同,不能混用 ...
- Leetcode最短的桥
934. 最短的桥 思路:先通过任意搜索方法找到其中一个岛屿 然后利用广度优先搜索,查找其与另一个岛屿的最短距离. class Solution {public:vector<int> d ...
- 【Leetcode刷题记录_C++】【搜索】
搜索 算法简介 深度优先遍历 (1)从一个未访问过的顶点开始,访问它的一个未访问过的相邻顶点. (2)如果顶点的所有相邻顶点都是已访问过的,则需要回溯到之前的一个顶点,选取它的另一个未被访问的相邻顶点 ...
- 【蓝桥杯】搜索专题总结——真题讲解
写在前面 小伙伴们我们又见面啦~这篇文章拖了又拖,终于写完啦.这篇讲了几道蓝桥杯中考察DFS和BFS的真题,大家可以去看看前面两篇文章,对搜索讲的很详细.[一万字]蓝桥杯算法竞赛备考(一)--搜索专题 ...
- 【Leetcode】每日一题打卡(64)
1619. 删除某些元素后的数组均值 - 简单ac class Solution { public:double trimMean(vector<int>& arr) {sort( ...
- java 算法思想,Java/12_算法思想.md at master · Jn6/Java · GitHub
常见的算法思想 一.排序思想 1.前K个高频元素(347) 问题描述:给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = ...
- 岛屿类-网格类问题-DFS | 力扣695. 岛屿的最大面积
思路参考上文: 岛屿类-网格类问题-DFS | 力扣200. 岛屿数量 本文讲解695. 岛屿的最大面积问题,属于常见的岛屿类-网格类问题 本题使用DFS的思想 题目 给定一个包含了一些 0 和 1 ...
最新文章
- java开发培训中消息中间件的优势有哪些
- Sparkamp;Spark性能调优实战
- linux内核pwn,[内核pwn] 环境搭建
- [AGC018 B] Sports Festival 解题报告
- C语言计算月份天数if,阅读下列说明,回答问题1至问题3。【说明】 以下代码由C语言书写,能根据指定的年、月计算当月所含天数 - 赏学吧...
- 在中国做操作系统研发 20 年是种什么体验?
- python自动化从零开始_从零开始学Selenium自动化测试:基于Python:视频教学版
- 欢乐纪中某A组赛【2019.7.8】
- java读取Resources下文件
- java绕过加密密码_JAVA中使用MD5加密实现密码加密
- js实现侧边栏信息展示效果
- 【Head First Java 读书笔记】(四)对象的行为
- datagridview滚动条自动滚动_一个自适应滚动条的实现
- sap business one 开发_敏捷软件开发实践:估算与计划读书笔记120第18章 估算速度...
- (Windbg调试一)minidump崩溃捕捉
- etc fstab 详解linux,Linux下/etc/fstab文件详解
- 通过QQ 2012 客户端协议获取clientkey的0x91数据包分析
- 计算机组装与维护公开课,(最新整理)计算机组装与维护公开课教案
- Java基础知识(二) 面向对象的技术
- OpenCV实践之路——方形图片对角线切割