• codevs 2806 红与黑


    2806 红与黑

    题目描述 Description

    有一个矩形房间,覆盖正方形瓷砖。每块瓷砖涂成了红色或黑色。一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上。编写一个程序,计算他通过重复上述移动所能经过的黑砖数。

    输入描述 Input Description

    输入包含多个数据集。一个数据集开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和行数,且都不超过20.
    每个数据集有H行,其中每行包含W个字符。每个字符的含义如下所示:
    '.'——黑砖
    '#'——红砖
    '@'——男子(每个数据集仅出现一次)
    两个0表示输入结束。

    输出描述 Output Description

    对每个数据集,程序应该输出一行,包含男子从初始瓷砖出发可到达的瓷砖数。

    样例输入 Sample Input

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

    样例输出 Sample Output

    45
    59
    6
    13

    思路:

    一道简单的搜索题,类似走迷宫,但更简单,

    首先找到起点(男子站的位置),然后直接搜。

    #include<cstdio>
    #include<cstring>
    using namespace std;
    bool a[22][22];
    char b[22][22],c[22];
    int w,h,s;
    void dfs(int x,int y)
    {
    	if(x<1||x>h||y<1||y>w||b[x][y]=='#')//判断是否越界以及是否是墙
    	  return ;
    	else
    	{
    		if(a[x][y])//判断是否走过
    		  return ;
    		if(b[x][y]=='.')
    		{
    			a[x][y]=1;
    			s+=1;
    		}
    		dfs(x,y+1);//向上
    		dfs(x,y-1);//向下
    		dfs(x-1,y);//向左
    		dfs(x+1,y);//向右
    	}
    }
    int main()
    {
    	int i,j,x,y;
    	while(scanf("%d%d",&w,&h))
    	{
    		s=1;//起点处的砖也是红色
    		memset(a,0,sizeof(a));
    		if(w==0&&h==0)
    		  return 0;
    		for(i=1;i<=h;i++)
    		{
    			scanf("%s",&c);//直接输入的话会输不全
    			for(j=1;j<=w;j++)
    			{
    				b[i][j]=c[j-1];
    				if(b[i][j]=='@')//找起点
    				{
    					x=i;y=j;
    				}
    			}
    		}
    		dfs(x,y);//开始找
    		printf("%d
    ",s);
    	}
    }
  • 相关阅读:
    MySQL常用维护管理工具 枫
    sql触发器 枫
    MySQL函数大全 枫
    使用Cscope阅读Linux源码 枫
    ASP.NET文件下载,直接向客户端输出文件 枫
    网站设计数据库集群和数据库垂直分割,水平分割,库表散列 枫
    西点成品分类 枫
    asp函数列表 枫
    [笔记]一道C语言面试题:实现 itoa() 函数
    [笔记]Arduino平台使用US100超声波测距模块的电平模式测距实验
  • 原文地址:https://www.cnblogs.com/jyhywh/p/5573971.html
Copyright © 2020-2023  润新知