zoukankan      html  css  js  c++  java
  • 【普及组模拟赛】家族

    题目描述

    在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝,但同一个家族的人不一定有相同姓氏。现在给你岛上的地图,求出岛上有多少个不同的家族。岛上的地图有n 行,每行有若干列,每个格子中要么是’空格表示大海,要么是‘ *’,表示河流或山丘,要么是小写字母,表示一户人家的姓氏。

    输入

    第一行是个数字 N,表示下面信息的行数,接下来是 N 行字符,每行由小写字母和*号组成,有些行的最前面也可能包含若干连续的空格,表示这些区域是大海,每一行最多不超过 200 个字符。

    输出

    一个数字,表示家族数。

    样例输入

    4
    *zlw**pxh
    l*zlwk*hx*
    w*tyy**yyy
    zzl

    样例输出

    3

    数据范围限制

    【数据范围】
    10%的数据, n<=1
    30%的数据, n<=10
    100% 的数据, n<=100 每一行最多不超过 200 个字符

    分析
    这题其实就是细胞问题
    遇到一个没有遍历过的点就从它开始搜,每搜一次,tj+1。

    程序:

    const
    dx:array[1..4]of longint=(1,-1,0,0);
    dy:array[1..4]of longint=(0,0,1,-1);
    var
    n,l,i,j,tj:longint;
    a:array[0..301,0..301]of boolean;
    s:string;
    h:array[0..20001,1..2]of longint;
    procedure work(p,q:longint);
    var
    i,w,t,x,y:longint;
    begin
        inc(tj);
        a[p,q]:=false;
        t:=1;w:=1;
        h[1,1]:=p;
        h[1,2]:=q;
        repeat
             for i:=1 to 4 do
             begin
                 x:=h[t,1]+dx[i];
                 y:=h[t,2]+dy[i];
                 if (x>0)and(x<=n)and(y>0)and(y<=l)and(a[x,y]=true) then
                 begin
                     inc(w);
                     h[w,1]:=x;
                     h[w,2]:=y;
                     a[x,y]:=false;
                 end;
             end;
             inc(t);
        until t>w;
    end;
    
    begin
        assign(input,'family.in');
        reset(input);
        assign(output,'family.out');
        rewrite(output);
        readln(n);
        fillchar(a,sizeof(a),false);
        l:=0;
        for i:=1 to n do
        begin
            readln(s);
            for j:=1 to length(s) do
            if s[j]=' ' then a[i,j]:=false else
            if s[j]='*' then a[i,j]:=false else
            a[i,j]:=true;
            if length(s)>l then l:=length(s);
        end;
        tj:=0;
        for i:=1 to n do
        for j:=1 to l do
        if a[i,j]=true then work(i,j);
        write(tj);
        close(input);
        close(output);
    end.
    
    
  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500007.html
Copyright © 2011-2022 走看看