百练oj2816:红与黑
- 总时间限制:
- 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:红与黑相关推荐
- 百练(十三~十六)题解
百练(十三) Bailian2806 公共子序列[最长公共子序列+DP] - 海岛Blog - CSDN博客 Bailian3143 验证"歌德巴赫猜想"[筛选法]_海岛Blog- ...
- 程序设计入门经典题解(百练篇)
参考链接:PKU百练题解(Bailian) Bailian1017 装箱问题[贪心] - 海岛Blog - CSDN博客 POJ1088 Bailian1088 滑雪[DFS+记忆化搜索]_海岛Blo ...
- 百练,4103,踩方格
百练,4103,踩方格 普通做法:(也可以找规律) #include #include//要调用memset函数,头文件 using namespace std; int visited[50][50 ...
- 北大OJ百练——4075:矩阵旋转(C语言)
百练的这道题很简单,通过率也达到了86%,所以我也就来贴个代码了...下面是题目: 不过还是说一下我的思路: 这道题对一个新来说,可能是会和矩阵的转置相混淆,这题并不是要我们去求矩阵的转置. 这题,我 ...
- 威佐夫博弈:百练OJ:1067:取石子游戏
威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 百练OJ:1067:取石子游戏 ...
- 百练OJ:4003:十六进制转十进制(python三行代码实现)
题目链接:百练OJ:4003 描述 将十六进制数转换成十进制数 输入 第一行有一个整数T,表示共有T组数据 接下来T行,每一行为一个16进制无符号正整数,位数不超过8位,数中的a-f均为大写字母,数前 ...
- 百练OJ:2742:统计字符数
题目链接: 百练OJ:2742:统计字符数 描述:判断一个由a-z这26个字符组成的字符串中哪个字符出现的次数最多 输入:第1行是测试数据的组数n,每组测试数据占1行,是一个由a-z这26个字符组成的 ...
- java函数实现进制转换与java实现八进制到十进制的转换(百练OJ:2735:八进制到十进制)
java进制转换函数介绍:Java二进制.八进制.十进制.十六进制相互转换: 二进制转十进制 Integer.parseInt("0110", 2); 八进制转十进制 Intege ...
- 百练OJ:2973:Skew数
题目链接: 百练OJ:2973:Skew数 描述:在 skew binary表示中, 第 k 位的值xk表示xk*(2k+1-1). 每个位上的可能数字是0 或 1,最后面一个非零位可以是2, 例如, ...
- 百练 Let it Bead
百练 Let it Bead 总时间限制: 内存限制: 1000ms 65536kB 描述 "Let it Bead" company is located upstairs at ...
最新文章
- Linux centos7 NMAP网络探测工具安装过程以及使用示例!
- Beautiful Soup的用法
- 行云管家堡垒机 导入腾讯云主机
- ugui源码_UGUI整体解决方案基础篇(Unity 2019)
- linux那些事之中断与异常(AMD64架构)_1
- 详解Cookie 【转】
- 网络编程基础知识(待更新补充)
- 技术支持和研发哪个好_考拉海购技术支持的前世今生,聊聊家常“黑历史”
- 百度云高速下载的两种方法
- Windows10安装ubuntu18.04双系统教程(双硬盘)
- python画航线图_数据可视化:python调用pyecharts库绘制航线专题图
- 基于 ClickHouse OLAP 的生态:构建基于 ClickHouse 计算存储为核心的“批流一体”数仓体系...
- sql升级重启计算机失败win10,win10系统电脑安装sql server需要一直重启的解决方法...
- 程序员版--致青春(一)——facejoking刷票工具(谈刷票原理)
- 感谢牛健老师为《Spring Boot实战派》开源Fadmin
- esp32与0.96寸屏幕实现信息传输
- PhotoShopCS6安装及其破解【带资源免费】
- win 10卸载mysql_Windows 10系统下彻底删除卸载MySQL的方法教程
- dolphinscheduler 2.0.5 告警组件-HTTP试用及改造
- 一、webpack的全局安装和局部安装以及使用