HDU - 1312 Red and Black(DFS)

简介: 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

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

#include<stdio.h>
#include<string.h>
char a[101][101];
int m,n,t;
int xy[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
void dfs(int x,int y)
{
  int i;
    for(i=0;i<4;i++)
    { 
    int x1 = x+xy[i][0];
        int y1 = y+xy[i][1];
    if(x1>=0&&x1<n&&y1>=0&&y1<m&&a[x1][y1]=='.')
    {
    a[x1][y1]='*';
    dfs(x1,y1);
  }
    } 
}
int main()
{
    while(1)
    {
    memset(a,0, sizeof(a));
    scanf("%d%d",&m,&n);
    if(m+n==0)
      break;
        int i,j,x,y;
    t=0;
    for(i=0; i<n; i++)
    {
      scanf("%s",a[i]);
            for(j=0; j<m; j++)
            {
                if(a[i][j]=='@')   
        {          
                    x=i;
          y=j;
        }
            }
    }
    t++;
    dfs(x,y);
    for(i=0; i<n; i++)
            for(j=0; j<m; j++)  
              if(a[i][j]=='*')
                t++; 
        printf("%d\n",t);
    }
    return 0;
}

相关文章
|
数据可视化 PyTorch 算法框架/工具
“零一万物”Yi系列魔搭最佳实践教程来了!
11 月 6 日,李开复博士带队创办的AI2.0公司零一万物正式开源发布首款预训练大模型 Yi-34B,模型开放商用申请,已在阿里云魔搭社区ModelScope首发。魔搭第一时间推出了模型部署相关教程,供开发者参考并快速上手。
|
10月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
安全 网络安全 网络虚拟化
优化大型企业网络架构:从核心到边缘的全面升级
大型企业在业务运作中涉及多种数据传输,涵盖办公应用、CRM/ERP系统、数据中心、云环境、物联网及安全合规等多个方面。其复杂的业务生态和全球布局要求网络架构具备高效、安全和可靠的特性。网络设计需全面考虑核心层、汇聚层和接入层的功能与冗余,同时实现内外部的有效连接,包括广域网连接、远程访问策略、云计算集成及多层次安全防护,以构建高效且可扩展的网络生态系统。
优化大型企业网络架构:从核心到边缘的全面升级
|
10月前
|
存储 人工智能 自然语言处理
ACE++:输入想法就能完成图像创作和编辑!阿里通义推出新版自然语言驱动的图像生成与编辑工具
ACE++ 是阿里巴巴通义实验室推出的升级版图像生成与编辑工具,支持多种任务,如高质量人物肖像生成、主题一致性保持和局部图像编辑。
666 8
|
11月前
|
监控 数据可视化 数据挖掘
惊叹!燕云十六声运营团队靠它提升工作效率!
在游戏行业竞争激烈的2025蛇年新春,燕云十六声团队通过选择合适的可视化协作软件实现了高效工作。板栗看板以其高度可视化的任务管理、灵活的任务分配和强大的文件管理功能脱颖而出。Trello、Asana、Monday.com、Zeplin和Slack等工具也各具特色,提供了丰富的插件、权限管理和实时沟通等功能,助力团队应对巨大工作量和协作挑战,提升工作效率,打造更优质的游戏产品。
475 12
|
JavaScript
如何使用内存快照分析工具来分析Node.js应用的内存问题?
需要注意的是,不同的内存快照分析工具可能具有不同的功能和操作方式,在使用时需要根据具体工具的说明和特点进行灵活运用。
390 62
|
Java 测试技术 数据安全/隐私保护
🚀Java零基础-continue语句详解
【10月更文挑战第3天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
526 4
|
SQL 安全 Windows
SQL安装程序规则错误解析与解决方案
在安装SQL Server时,用户可能会遇到安装程序规则错误的问题,这些错误通常与系统配置、权限设置、依赖项缺失或版本不兼容等因素有关
|
关系型数据库 MySQL 开发工具
MySQL中忘记用户密码怎么办?
MySQL中忘记用户密码怎么办?
|
Web App开发
webRTC 读取帧保存为bitmap
webRTC 读取帧保存为bitmap
200 0

热门文章

最新文章