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首发。魔搭第一时间推出了模型部署相关教程,供开发者参考并快速上手。
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
人工智能 Docker 容器
AI思维导图工具跨领域学习的好帮手
AI思维导图工具跨领域学习的好帮手
|
JavaScript
如何使用内存快照分析工具来分析Node.js应用的内存问题?
需要注意的是,不同的内存快照分析工具可能具有不同的功能和操作方式,在使用时需要根据具体工具的说明和特点进行灵活运用。
692 159
|
Java 测试技术 数据安全/隐私保护
🚀Java零基础-continue语句详解
【10月更文挑战第3天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
714 4
|
前端开发
CSS流光文字效果:打造网页上的霓虹灯效果!
CSS流光文字效果:打造网页上的霓虹灯效果!
|
数据采集 机器学习/深度学习 数据可视化
纵横小说网站数据采集与分析实现
本文介绍了一个基于Python的纵横中文网数据采集与分析项目,旨在通过技术手段深入分析网络小说市场,掌握读者需求,评估作品质量,并为网站运营提供策略支持。
970 0
纵横小说网站数据采集与分析实现
|
网络协议 Shell 网络虚拟化
手把手教你玩MPLS VPN如何配置
手把手教你玩MPLS VPN如何配置
1659 0
|
机器学习/深度学习 人工智能 监控
生成式 AI 与 LangCHain(二)(4)
生成式 AI 与 LangCHain(二)
965 5