别墅房间pascal求解

题目描述 Description
小浣熊松松到他的朋友家别墅去玩,发现他朋友的家非常大,而且布局很奇怪。具体来说,朋友家的别墅可以被看做一个N*M的矩形,有墙壁的地方被标记为’#’,其他地方被标记为’.’。两个格子(a,b)和(c,d)被当做在同一个房间内,当且仅当|a-c|+|b-d|=1。现在松松想知道,有多少个房间。
输入描述 Input Description
第一行包含两个整数,N和M。
接下来N行描述别墅的情况,只包含’*’和’.’。
输出描述 Output Description
输出仅一行,为房间数。
样例输入 Sample Input
3 3
.#.
#.#
.#.
样例输出 Sample Output
5

const dx:array[1..4]of integer=(1,0,-1,0);

         dy:array[1..4]of integer=(0,1,0,-1);

var n,m,x,y,i,j,s:integer; a:array[0..100,0..100]of char;

procedure search(x,y:integer);        {遍历同一个房间的所有格子}

var i:integer;

begin

  a[x,y]:=' '; {标记已检测过}

  for i:=1 to 4 do {检测4个可能方向}

    if a[x+dx[i],y+dy[i]]='.' then  {加了“边框”不需要检测越界,相邻='.'表示同一房间}

      search(x+dx[i],y+dy[i]);

end;

begin

  readln(m,n);

  for i:=1 to m do            {读入房间数据}

  begin

    for j:=1 to n do read(a[i,j]);

    readln;

  end;

  s:=0;

  for i:=1 to m do

    for j:=1 to n do {扫描界内所有位置}

      if a[i,j]='.' then        {找到了新的房间}

      begin inc(s); search(i,j); end;    {计数并遍历该房间的所有格子}

  writeln(s);

end.

温馨提示:答案为网友推荐,仅供参考
相似回答