nyoj 1237 最大岛屿(dfs)

描述

神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等。加勒比海盗,你知道吧?杰克船长驾驶着自己的的战船黑珍珠1号要征服各个海岛的海盜,最后成为海盗王。  这是一个由海洋、岛屿和海盗组成的危险世界。面对危险重重的海洋与诡谲的对手,如何凭借智慧与运气,建立起一个强大的海盗帝国。

杰克船长手头有一张整个海域的海图,上面密密麻麻分布着各个海屿的位置及面积。他想尽快知道整个海域共有多少岛屿以及最大岛屿的面积。
输入

第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

提示

①若一个陆地八个方向之一(上、下、左、右、左上、右上、左下、右下)的位置也是陆地,则视为同一个岛屿。 ② 假设第一行,最后一行,第一列,最后一列全为0. ③ 1<M, N≤500 1<T≤100000

来源
第八届河南省程序设计大赛

直接dfs暴力即可。

 1 #pragma comment(linker, "/STACK:1024000000,1024000000")
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<math.h>
 7 #include<algorithm>
 8 #include<queue>
 9 #include<set>
10 #include<bitset>
11 #include<map>
12 #include<vector>
13 #include<stdlib.h>
14 using namespace std;
15 #define ll long long
16 #define eps 1e-10
17 #define MOD 1000000007
18 #define N 100000
19 #define NN 506
20 #define inf 1e12
21 int n,m,c;
22 char s[N];
23 char mp[NN][NN];
24 int vis[NN][NN];
25 int ans;
26 int dirx[]={0,0,-1,1,-1,-1,1,1};
27 int diry[]={-1,1,0,0,-1,1,-1,1};
28 int one;
29 void dfs(int x,int y){
30
31     one++;
32     ans=max(one,ans);
33     vis[x][y]=1;
34     for(int i=0;i<8;i++){
35         int dx = x+dirx[i];
36         int dy = y+diry[i];
37         if(dx<0 || dx>=n || dy <0 || dy>=m) continue;
38         if(vis[dx][dy]) continue;
39         if(mp[dx][dy]==‘0‘) continue;
40         dfs(dx,dy);
41     }
42 }
43 int main()
44 {
45     while(scanf("%d%d%d",&n,&m,&c)==3){
46         getchar();
47         for(int i=0;i<n;i++){
48             gets(s);
49             int len=strlen(s);
50             int k=0;
51             for(int j=0;j<len;j++){
52                 if(s[j]==‘ ‘)continue;
53                 mp[i][k++]=s[j];
54             }
55         }
56       /*
57       printf("----------------------\n");
58       for(int i=0;i<n;i++){
59             for(int j=0;j<m;j++){
60                 printf("%c",mp[i][j]);
61             }
62             printf("\n");
63         }
64       printf("----------------------\n");
65       */
66         ans=-1;
67         int w=0;
68         memset(vis,0,sizeof(vis));
69         for(int i=0;i<n;i++){
70             for(int j=0;j<m;j++){
71                 if(vis[i][j]) continue;
72                 if(mp[i][j]==‘0‘) continue;
73                 w++;
74                 one=0;
75                 dfs(i,j);
76             }
77          }
78          //printf("&&& %d\n",ans);
79          printf("%d %d\n",w,ans*c);
80     }
81     return 0;
82 }

时间: 2024-10-15 08:43:54

nyoj 1237 最大岛屿(dfs)的相关文章

NYOJ 587 blockhouses 【DFS】

blockhouses 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. A blockhouse is a small castle th

NYOJ 722 数独 【DFS】+【预处理】

数独 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个3*3宫内的数字均含1-9,不重复. 每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的. 有一天hrdv碰到了一道号称是世界上最难的数独的题目,作为一名合格的程序员,哪能随随便便向困难低头,于是他决定编个程序来解决它.. 输入 第一行有一个

nyoj 1237 简单dfs

最大岛屿 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比海盗,你知道吧?杰克船长驾驶着自己的的战船黑珍珠1号要征服各个海岛的海盜,最后成为海盗王.  这是一个由海洋.岛屿和海盗组成的危险世界.面对危险重重的海洋与诡谲的对手,如何凭借智慧与运气,建立起一个强大的海盗帝国. 杰克船长手头有一张整个海域的海图,上面密密麻麻分布着各个海屿的位置及面积.他想尽快知道整个海域共有多少岛屿以及最大岛屿的面

hiho #1310 : 岛屿 (dfs,hash)

题目2 : 岛屿 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给你一张某一海域卫星照片,你需要统计: 1. 照片中海岛的数目 2. 照片中面积不同的海岛数目 3. 照片中形状不同的海盗数目 其中海域的照片如下,"."表示海洋,"#"表示陆地.在"上下左右"四个方向上连在一起的一片陆地组成一座岛屿. .####.. .....#. ####.#. .....#. ..##.#. 上图所示的照片中一共有4座岛屿:其中

nyoj素数环(dfs)

素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简便起见,我们规定每个素数环都从1开始.例如,下图就是6的一个素数环. 输入 有多组测试数据,每组输入一个n(0<n<20),n=0表示输入结束. 输出 每组第一行输出对应的Case序号,从1开始. 如果存在满足题意叙述的素数环,从小到大输出. 否则输出No Answer. 样例输入 6 8 3 0 样

nyoj 587 blockhouses(DFS)

blockhouses 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. A blockhouse is a small castle th

NYOJ 58 最少步数(DFS)

时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,1,0,1,0,0,0,0,1 1,1,1,1,1,1,1,1,1 0表示道路,1表示墙. 现在输入一个道路的坐标作为起点,再如

&lt;LeetCode OJ&gt; 200. Number of Islands

Total Accepted: 48411 Total Submissions: 171609 Difficulty: Medium 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 verticall

nyoj 325 zb的生日 【DP】||【DFS】

两种方法: 第一种:将总数一半当做背包,用总数-2*最多能装的数目就是所求: 第二种:深搜: zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能