计算细胞数(tyvj1127)

描述 Description

一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。

如:阵列

0234500067
1034560500
2045600671
0000000089  
有4个细胞

输入格式 Input Format

第一行 :两个数字M N (1<=M<=50 1<=N<80)表示该阵列有M行N列 

从第2行到第M+1行 每行有连续的N个字符

输出格式 Output Format

一行: 细胞个数

样例输入 Sample Input

4 10
0234500067
1034560500
2045600671
0000000089

样例输出 Sample Output

4

=======

简单搜索

=======

 

const
  dx:array[1..4]of longint=(1,-1,0,0);
  dy:array[1..4]of longint=(0,0,-1,1);
var
  m,n:longint;
  ans:longint;
  map:array[0..51,0..81]of char;
  //f:array[0..51,0..81]of boolean;
procedure init;
begin
  assign(input,'p1127.in');
  assign(output,'p1127.out');
  reset(input); rewrite(output);
end;

procedure terminate;
begin
  close(input); close(output); halt;
end;

procedure dfs(x,y:longint);
var
  i:longint;
  //j:longint;
  x_,y_:longint;
begin
  for i:=1 to 4 do
    begin
      x_:=x+dx[i];
      y_:=y+dy[i];
      if map[x_,y_]<>'0' then
        begin
          map[x_,y_]:='0';
          dfs(x_,y_);
        end;
    end;
end;

procedure main;
var
  i,j:longint;
begin
  readln(m,n);
  for i:=0 to m+1 do
    for j:=0 to n+1 do
      map[i,j]:='0';

  ans:=0;
  //fillchar(f,sizeof(f),true);
  for i:=1 to m do
    begin
      for j:=1 to n do
        begin
          read(map[i,j]);
        end;
      readln;
    end;
    
  for i:=1 to m do
    for j:=1 to n do
      begin
        if map[i,j]<>'0' then
        begin
          inc(ans);
          map[i,j]:='0';
          dfs(i,j);
        end;
      end;
  writeln(ans);
end;

begin
  init;
  main;
  terminate;
end.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值