hdu-1312-Red and Black

简介: hdu-1312-Red and Black


Red and Black

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13464    Accepted Submission(s): 8338


Problem Description

There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on red tiles, he can move only on black tiles.

Write a program to count the number of black tiles which he can reach by repeating the moves described above.

 


Input

The input consists of multiple data sets. A data set starts with a line containing two positive integers W and H; W and H are the numbers of tiles in the x- and y- directions, respectively. W and H are not more than 20.

There are H more lines in the data set, each of which includes W characters. Each character represents the color of a tile as follows.

'.' - a black tile
'#' - a red tile
'@' - a man on a black tile(appears exactly once in a data set)

 


Output

For each data set, your program should output a line which contains the number of tiles he can reach from the initial tile (including itself).

 


Sample Input

6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0

 


Sample Output

45 59 6 13

 


Source

Asia 2004, Ehime (Japan), Japan Domestic

 


Recommend

Eddy   |   We have carefully selected several similar problems for you:  1241 1010 1372 1242 1253

 



题目分析:

最简单的dfs   就是让你  从@出发最对能走多少步  可以四个方向走但是遇到#不能走


#include<cstdio>
#include<cstring>
char a[22][22];
int x,y;
int n,m;
int cnt;
void dfs(int x,int y)
{
  if(a[x][y]=='#') return;
  if(x>=1&&x<=m&&y>=1&&y<=n)
  {
      a[x][y]='#';// 把走过的路都标记成墙不能再走了
    cnt++;//  每走一步就加一  
    dfs(x+1,y);// 向下遍历 
    dfs(x-1,y);//  向上遍历
    dfs(x,y-1);//  向左遍历
    dfs(x,y+1);// 向右遍历    就是每个方向都走一遍直到遇到 # 转方向
  }   
}
int main()
{
 
  while(~scanf("%d%d",&n,&m)&&n|m)
  {
    int i,j;
    memset(a,0,sizeof(a));
    for(i=1;i<=m;i++)
    {
      scanf("%s",a[i]+1);// 记住这里一定要加一因为 你的初始位置是  1  1  如果不加仪的话初始位置就         //是1  0了   因为这里选择的是一行一行的输入每行是一个字符串  字符串的首地址就是  0 所以这里要加1  变成 1 1
      for(j=1;j<=n;j++)
      {
        if(a[i][j]=='@')
        {
          x=i;
          y=j;
        }
      }
    }
    cnt=0;
    dfs(x,y);
    printf("%d\n",cnt);
  }
  return 0;
}




目录
相关文章
|
C++
头歌实训平台 C++实训 类的继承与保护
头歌实训平台 C++实训 类的继承与保护
671 0
算法设计 --- randX实现randY
算法设计 --- randX实现randY
算法设计 --- randX实现randY
|
缓存 达摩院 算法
如何通过阿里达摩院MindOpt获得MILP多个解
在2024年1月达摩院新发布的MindOpt 优化求解器V1.1.0版本中,新增加了一个"MIP/SolutionNumber"参数,可以用于获取MILP多个解。有些业务里,会想要找到更多的可行解,目标值不一定最优,用于给业务指导。本篇案例将讲解如何使用此功能。
463 1
|
开发框架 开发工具 Java
从零到高手:一文教你快速上手Vaadin,打造首个炫酷Web应用,开启编程新世界的大门
【8月更文挑战第31天】Vaadin是一款基于Java的Web应用开发框架,以其丰富的组件库、简洁的API及对现代Web标准的支持而广受开发者欢迎。本文将指导你从零开始快速搭建一个简单的Vaadin应用。首先确保已安装JDK 11及以上版本和IDE(如IntelliJ IDEA或Eclipse)。接着使用Spring Initializr创建新项目,并选中“Spring Web”和“Vaadin”依赖。创建项目后,编写主应用类和主页类,实现基本页面功能。最后配置启动页面并运行应用。通过这些步骤,你将成功搭建一个基础Vaadin应用,开启探索更多特性的旅程。
1629 0
|
消息中间件 弹性计算 Java
|
编解码
uni-app 61完善几个小问题
在uni-app 61版本中进行小问题完善时,可能涉及多个方面,包括但不限于界面布局、数据绑定、组件属性设置等。以下是根据您提供的代码片段分析的一些建议: 1. **界面布局优化**:
|
消息中间件 持续交付 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第16天】 在当今快速迭代和持续交付的软件发展环境中,传统的单体应用架构逐渐显得笨重且难以适应市场的快速变化。微服务架构作为一种新的软件设计模式,以其模块化、独立性和可伸缩性的特点,为后端开发带来了革命性的变化。本文将深入探讨微服务架构的设计原则、关键技术和实践策略,旨在帮助开发者构建出既高效又可靠的分布式系统。
76 0
|
SpringCloudAlibaba 安全 算法
五.SpringCloudAlibaba极简入门-修改Nacos控制台密码
Nacos的控制台登录账号是nacos/nacos , 在生产环境中一定需要修改密码,不然一旦服务器地址泄露Nacos就会变得不安全,后果不堪设想。在上一章节我们做Nacos集群时我们基于MySql做了Nacos的数据持久化。在Nacos的数据库中有一个user表 , 这个表就是用来记录Nacos的控制台登录账号的,我们只需要修改表中的password 字段的 值即可。如下
|
JavaScript API CDN
一个功能强大、好看的vue表格组件
支持Vue 3/Vue 2的一个表格组件,支持表格增删改、虚拟表格、复杂表格、树形表格、数据校验、懒加载、分页、弹窗、单元格样式设置、按钮自定义样式、表头样式、单元格合等功能。
2516 0
一个功能强大、好看的vue表格组件
|
JavaScript 前端开发
React-组件-Ref转发
React-组件-Ref转发
94 0