acm:屁屁上的巴掌

news/2024/10/19 16:41:28/

涉及算法:深度搜索

题目:

题目描述小新是个调皮的孩子,他总是会把衣服搞脏,他的妈妈美伢非常的生气,于是在《和妈妈的约定条款》加上了第三百七十七条:小新衣服上每有一块污渍妈妈就会打小新的小屁屁一下作为惩罚。我们规定如果两个污渍相邻(直接相邻的上下左右、左上、左下,右上、右下都算相邻)那么它们就算是一块污渍。现在小新又把衣服搞脏了,请你帮他算一算他的屁股上会挨几巴掌?输入输入将会包含多组测试数据,每组测试数据将会以m和n开头,表示将会用m行n列的网格代表小新的衣服,如果m=0输入结束;1 <= m <= 100 并且1 <= n <= 100.接下来是m行n列的网格,网格中’@’代表污渍,’*’代表没有污渍。输出对于每组数据,请输出小新屁股挨到的巴掌的数量。

 样例输入

1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0

样例输出

0
1
2
2

 

大致搜索步骤:搜到一个是污渍后,标记上“已搜过”,紧接着搜它的周围,重复此步骤。遇到*后就停止,回到上一层。走到不能搜的点后跳过,搜完后也回到上一层。

注意:搜索前要判断该点是否越界,是否已搜过。

代码:

#include<stdio.h>
#include<string.h>
int color(int x, int y);
char map[101][101];
int res[101][101];
int direct[4]={-1,0,1};
int m,n;
int main(){
int flag;
int i,j;
while(scanf("%d%d",&m,&n)!=EOF){
getchar();
memset(map,0,sizeof(map));
memset(res,0,sizeof(res));
flag=0;
if (m==0) break;
for(i=0;i<m;i++){
gets(map[i]);
}for(i=0;i<m;i++)for(j=0;j<n;j++){if (res[i][j]!=0)continue;else{flag+=color(i,j);}}
printf("%d\n",flag);
}
return 0;
}
int color(int x, int y){
int i,j;if(map[x][y]=='*') return 0;
else{
res[x][y]=1;
for(i=0;i<3;i++)for(j=0;j<3;j++){if(x+direct[i]>=0 && x+direct[i]<m && y+direct[j]>=0 && y+direct[j]<n && (!res[x+direct[i]][y+direct[j]])){//注意逻辑取反!,而不是用位取反~color(x+direct[i],y+direct[j]);//上下左右检测的便捷写法,每种情况都要判断边界,判断是否已读
        }}}
return 1;
}

 

转载于:https://www.cnblogs.com/cnnnnnn/p/10080527.html


http://www.ppmy.cn/news/902133.html

相关文章

HHUOJ 1114

1114: 屁屁上的巴掌 时间限制: 1 Sec 内存限制: 128 MB 提交: 71 解决: 38 [提交][状态][ 讨论版][命题人:外部导入] 题目描述 小新是个调皮的孩子&#xff0c;他总是会把衣服搞脏&#xff0c;他的妈妈美伢非常的生气&#xff0c;于是在《和妈妈的约定条款》加上了第三百七十…

令人惊艳的句子总结

Continually update ☁️☁️?   ☁       ☁ ✈   ☁  ?  ???????? ?? / ? l?  \???  ?/ ? l ?  \?? ? /   l ?  \??? ?/?   l  ? \?? 孩子们的小诗&#xff08;Poems for Children&#xff09; 《灯》 灯把黑…

Java去除字符串和数字前面的0

Java去除字符与数字串前面多余的0 学习是一种进步&#xff0c;今天比明天更好&#xff0c;便是收获。 1. 去除字符串开头的0 /*** 去除字符串开头的0* param str* return*/public static String removeStrBeginZero(String str){int result Integer.parseInt( str);String tem…

层净高怎么算_层高和净高怎么算,标准是多少?

层高和净高是有区别的&#xff0c;一定要区分开。层高是指住宅高度以“层”为单位计量&#xff0c;通常包括下层地板面或楼板面到上层楼板面之间的距离。楼层净高&#xff0c;指楼面或地面至上部楼板底面之间的最小垂直距离。 购房者在收房的时候会对室内实际高度进行测量&…

贵州茅台600519

2021.11.05买入100股&#xff0c;2021.11.22卖出 买入价1837.220 卖出价1849.000&#xff0c;盈亏率0.65% 短期趋势&#xff1a; 强势上涨过程中&#xff0c;可逢低买进&#xff0c;暂不考虑做空。 中期趋势&#xff1a; 上涨趋势有所减缓&#xff0c;可适量高抛低吸。 …

为什么穷人越穷,富人越富?

在现实社会中&#xff0c;强者恒强&#xff0c;弱者愈弱&#xff0c;赢家通吃&#xff0c;这是始终存在的一种社会现象和生存法则 。1968年&#xff0c;美国著名的社会学家罗伯特莫顿首次将“穷人越穷&#xff0c;富人越富”的现象归因为“马太效应”。 莫顿认为&#xff0c;任…

12条标准判定穷富:整天工作的人当不了富翁

决定你是富人还是穷人的12条标准 1、自我认知 穷人:很少想到如何去赚钱和如何才能赚到钱,认为自己一辈子就该这样,不相信会有什么改变。 富人:骨子里就深信自己生下来不是要做穷人,而是要做富人,他有强烈的赚钱意识,这也是他血液里的东西,他会想尽一切办法使自己致富. 2、休闲 …

什么是市净率

市净率&#xff08;Price-to-Book Ratio&#xff0c;简称P/B PBR&#xff09;指的是每股股价与每股净资产的比率。 市净率可用于股票投资分析&#xff0c;一般来说市净率较低的股票&#xff0c;投资价值较高&#xff0c;相反&#xff0c;则投资价值较低&#xff1b;但在判断投资…