问题 Q: 【搜索】卫星照片

你的忏悔或许会让你心安,但未必别人如此。

题目描述

农夫John正在研究他的农场的卫星照片。照片用一个R(1≤R≤75)行C(1≤C≤75)字符矩阵表示。
如下图:
..................
..#####.......##..
..#####......###..
..................
#.......###.....#.
#.....#####.......

图上的一块相连通的“#”表示一群奶牛或一个房间,两个子“#”连通的意思是左右或上下相连。而下面的两块则是分开的:
....
.#..
..#.
....
John现在根据卫星照片上的的这些“#”块的形状来判断哪些是牛群,哪些是房间。如果一个“#”块形状的边是水平或垂直的矩形,则是房间,其他的则认为都是牛群。在第一个图中,有三个房间(2×1,2×5,and 1×1)和2群牛。
请根据输入文件中的数据,统计出房间数和牛群数。
数据中牛群不会包围另一个牛群或房间。

 

输入

第1行两个整数:R和C:
第2~R+l行:第i+1行表示照片的第i行情况,由C个字符组成。

 

输出

第1行:房间数;
第2行:牛群数。

 

样例输入

复制样例数据

5 8
#####..#
#####.##
......#.
.###...#
.###..##

样例输出

2
2
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int M,N,mx1,mx2,mi1,mi2,jgx,jgy,jg;
int mp[110][110];
char ch;
int fx[4]= {1,0,-1,0};
int fy[4]= {0,1,0,-1};
int pd(int x,int y)
{if(x>0 || x<=N || y>0 || y<=M)return 1;return 0;}
void dfs(int x,int y)
{mp[x][y]=0;mx1=max(x,mx1),mx2=max(y,mx2);mi1=min(x,mi1),mi2=min(y,mi2);jg++;for(int i=0; i<4; i++){int xx=x+fx[i];int yy=y+fy[i];if(mp[xx][yy]==1&&pd(xx,yy))dfs(xx,yy);}
}
int main()
{cin>>N>>M;for(int i=1; i<=N; i++){for(int j=1; j<=M; j++){cin>>ch;if(ch=='#')mp[i][j]=1;}}for(int i=1; i<=N; i++){for(int j=1; j<=M; j++){if(mp[i][j]==1){jg=0;mx1=0,mx2=0,mi1=inf,mi2=inf;dfs(i,j);if(jg==(mx1-mi1+1)*(mx2-mi2+1))jgx++;elsejgy++;}}}cout<

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部