• 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("----------------------
    ");
    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("
    ");
    63         }
    64       printf("----------------------
    ");
    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
    ",ans);
    79          printf("%d %d
    ",w,ans*c);
    80     }
    81     return 0;
    82 }
    View Code
  • 相关阅读:
    代码规范 for node.js with 'npm-coding-style'
    转:HL7 Tools suite
    转 HL7 2.x
    创建公共配置表,并以全国区县代码维护为例
    转 MySQL 数据备份与还原
    [转]''\=DevExpress 中 汉化包 汉化方法
    MSI Error 1603 installing AppFabric 1.1 / Win7 x64
    [转]如何修改远程桌面默认端口号
    【转】windows server 2012清除并重建SID
    oneM2M标准发展神速 实现万物联网的愿景
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/5183613.html
Copyright © 2020-2023  润新知