总时间限制: 
1000ms 
内存限制: 
65536kB
描述
有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。
输入
包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下
1)‘.’:黑色的瓷砖;
2)‘#’:白色的瓷砖;
3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。
当在一行中读入的是两个零时,表示输入结束。
输出
对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。
样例输入
6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
0 0
样例输出
45
来源
1979

代码:

#include<stdio.h>
#include<string.h>#define MAX 30
char map[MAX][MAX];int count(int px , int py){if( map[px][py] == '#' )return 0;else{map[px][py] = '#';return 1 + count(px-1,py) + count(px+1,py) + count(px,py+1) + count(px,py-1);}
}int main(){int c,r;int i,j,px,py;while(1){scanf("%d %d",&c,&r);getchar();if( c == 0 )break;memset(map , '#' , 900);for( i = 1 ; i <= r ; i++ ){for( j = 1 ; j <= c ; j++)scanf("%c",&map[i][j]);getchar();}for( i = 1 ; i <= r ; i++ ){for( j = 1 ; j <= c ; j++ ){if( map[i][j] == '@' ){px = i;py = j;}}}printf("%d\n",count(px,py));}return 0;
}

思路是用map数组来存储地图,然后从@点出发,向四周计数。要用递归,如果一个黑点,则返回1 + 周围几个黑点递归下去遇到的黑点数,注意当数过一个黑点后要把那个点赋值为#,保证不会重复计数。因为可能有边界的问题,所以数组存储从(1,1)开始,要用memset()把map[]全部初始化为'#',这样返回值就可以用同一个公式而不用分类讨论。

百练oj2816:红与黑相关推荐

  1. 百练(十三~十六)题解

    百练(十三) Bailian2806 公共子序列[最长公共子序列+DP] - 海岛Blog - CSDN博客 Bailian3143 验证"歌德巴赫猜想"[筛选法]_海岛Blog- ...

  2. 程序设计入门经典题解(百练篇)

    参考链接:PKU百练题解(Bailian) Bailian1017 装箱问题[贪心] - 海岛Blog - CSDN博客 POJ1088 Bailian1088 滑雪[DFS+记忆化搜索]_海岛Blo ...

  3. 百练,4103,踩方格

    百练,4103,踩方格 普通做法:(也可以找规律) #include #include//要调用memset函数,头文件 using namespace std; int visited[50][50 ...

  4. 北大OJ百练——4075:矩阵旋转(C语言)

    百练的这道题很简单,通过率也达到了86%,所以我也就来贴个代码了...下面是题目: 不过还是说一下我的思路: 这道题对一个新来说,可能是会和矩阵的转置相混淆,这题并不是要我们去求矩阵的转置. 这题,我 ...

  5. 威佐夫博弈:百练OJ:1067:取石子游戏

    威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 百练OJ:1067:取石子游戏 ...

  6. 百练OJ:4003:十六进制转十进制(python三行代码实现)

    题目链接:百练OJ:4003 描述 将十六进制数转换成十进制数 输入 第一行有一个整数T,表示共有T组数据 接下来T行,每一行为一个16进制无符号正整数,位数不超过8位,数中的a-f均为大写字母,数前 ...

  7. 百练OJ:2742:统计字符数

    题目链接: 百练OJ:2742:统计字符数 描述:判断一个由a-z这26个字符组成的字符串中哪个字符出现的次数最多 输入:第1行是测试数据的组数n,每组测试数据占1行,是一个由a-z这26个字符组成的 ...

  8. java函数实现进制转换与java实现八进制到十进制的转换(百练OJ:2735:八进制到十进制)

    java进制转换函数介绍:Java二进制.八进制.十进制.十六进制相互转换: 二进制转十进制 Integer.parseInt("0110", 2); 八进制转十进制 Intege ...

  9. 百练OJ:2973:Skew数

    题目链接: 百练OJ:2973:Skew数 描述:在 skew binary表示中, 第 k 位的值xk表示xk*(2k+1-1). 每个位上的可能数字是0 或 1,最后面一个非零位可以是2, 例如, ...

  10. 百练 Let it Bead

    百练 Let it Bead 总时间限制: 内存限制: 1000ms 65536kB 描述 "Let it Bead" company is located upstairs at ...

最新文章

  1. Linux centos7 NMAP网络探测工具安装过程以及使用示例!
  2. Beautiful Soup的用法
  3. 行云管家堡垒机 导入腾讯云主机
  4. ugui源码_UGUI整体解决方案基础篇(Unity 2019)
  5. linux那些事之中断与异常(AMD64架构)_1
  6. 详解Cookie 【转】
  7. 网络编程基础知识(待更新补充)
  8. 技术支持和研发哪个好_考拉海购技术支持的前世今生,聊聊家常“黑历史”
  9. 百度云高速下载的两种方法
  10. Windows10安装ubuntu18.04双系统教程(双硬盘)
  11. python画航线图_数据可视化:python调用pyecharts库绘制航线专题图
  12. 基于 ClickHouse OLAP 的生态:构建基于 ClickHouse 计算存储为核心的“批流一体”数仓体系...
  13. sql升级重启计算机失败win10,win10系统电脑安装sql server需要一直重启的解决方法...
  14. 程序员版--致青春(一)——facejoking刷票工具(谈刷票原理)
  15. 感谢牛健老师为《Spring Boot实战派》开源Fadmin
  16. esp32与0.96寸屏幕实现信息传输
  17. PhotoShopCS6安装及其破解【带资源免费】
  18. win 10卸载mysql_Windows 10系统下彻底删除卸载MySQL的方法教程
  19. dolphinscheduler 2.0.5 告警组件-HTTP试用及改造
  20. 一、webpack的全局安装和局部安装以及使用

热门文章

  1. gentoo linux软件安装,Gentoo Linux 快速安装方法安装
  2. 【第一组】第七次冲刺例会纪要
  3. 短信注册验证以及邮箱激活
  4. 使用虹软SDK实现离线人脸识别(局域网)
  5. ESP32用自签CA进行MQTT的TLS双向认证通信
  6. 小猫爬山题解(暴力解题)
  7. 生成对抗网络发展及其主要工程应用综述
  8. Zabbix实现短信报警设置(实战)
  9. 视觉目标跟踪漫谈:从原理到应用
  10. 注册CSE服务中心失败排查步骤