Problem J: 搜索基础之红与黑

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 170  Solved: 100
[Submit][Status][Web Board]

Description

有一间长方形的房子,地上铺了白色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。

Input

包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下
1)‘.’:黑色的瓷砖;
2)‘#’:白色的瓷砖;
3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。
当在一行中读入的是两个零时,表示输入结束。

Output

对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。

Sample Input

6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
0 0

Sample Output

45
#include<stdio.h>
#include<math.h>
int W,H;
char z[21][21];
int f(int x,int y)
{
if(x<0||x>=H||y<0||y>=W)//注意边界条件!!!//
return 0;//如果走出矩阵范围
if(z[x][y]=='#')
return 0;//该瓷砖已被走过
else
{
z[x][y]='#';
return 1+f(x-1,y)+f(x+1,y)+f(x,y-1)+f(x,y+1);
}
}
int main()
{
int i,j;
while(scanf("%d %d",&W,&H)!=EOF&&W!=0&&H!=0)
{
for(i=0;i<H;i++)//读入矩阵,以行来存储
scanf("%s",z[i]);
for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
if(z[i][j]=='@')
printf("%d\n",f(i,j));
}
}
return 0;
}

  

最新文章

  1. 重温Bootstrap
  2. Java之Ajax技术
  3. asp.net项目发布网上-当前自定义错误设置禁止远程查看应用程序
  4. linux下c语言实现计算磁盘剩余空间
  5. 深入理解计算机系统第二版习题解答CSAPP 2.16
  6. 《Velocity java开发指南》中文版(下)转载
  7. centos 6.5上部署jetty
  8. php 4.X与5.x版本构造函数区别与类的继承
  9. CCA概述和安装
  10. CSS彻底研究(2)
  11. python unittest 测试笔记(一)
  12. 分享一个图片上传插件(TP5.0)
  13. awk命令练习
  14. 设计模式之“Decorator”注疏#02
  15. C++对C语言的变量检测增强
  16. SSIS-导入Excel文件时记录行号
  17. .net core下简单构建高可用服务集群
  18. 软件光栅器实现(二、VS和PS的运作,法线贴图,切空间的计算)
  19. Joyoi花店橱窗(原tyvj1124)
  20. [Flutter] Windows平台Flutter开发环境搭建(Andorid Studio)

热门文章

  1. 【BZOJ4144】[AMPPZ2014]Petrol(最短路+最小生成树+并查集)
  2. 如何从git上clone一个项目
  3. Linux下配置Java环境方法
  4. jsp内置对象request的使用方法
  5. iOS拼图
  6. POJ2388-Who's in the Middle
  7. VC添加全局热键的方法
  8. POJ1028 Web Navigation
  9. 关于苹果出现NaN的情况----由Date格式解析方式不同引起的Bug
  10. 牛客练习赛41D(思维转化)