I - Red and Black

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d
& %I64u

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
#include<stdio.h>
#include<queue>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
char a[25][25];
int b[25][25];
int dir[4][2]= {0,1,1,0,0,-1,-1,0};
struct node
{
int x,y;
} w;
int sum=0;
void bfs(int x,int y)
{
queue<node> q;
int k,i,j;
w.x=x;
w.y=y;
q.push(w);
while(!q.empty())
{
node s=q.front();
q.pop();
for(int i=0; i<4; i++)
{
w.x=s.x+dir[i][0];
w.y=s.y+dir[i][1];
if(!b[w.x][w.y]&&a[w.x][w.y]!='#'&&w.x>=1&&w.x<=m&&w.y>=1&&w.y<=n)
{
sum++;
b[w.x][w.y]=1;
q.push(w);
}
}
}
}
int main()
{
while(~scanf("%d%d",&n,&m)&&(n||m))
{
sum=0;
int i,j,x=0,y=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=1; i<=m; ++i)
scanf("%s",a[i]+1);
for(i=1; i<=m; ++i)
for(j=1; j<=n; ++j)
{
if(a[i][j]=='@')
{
x=i;
y=j;
break;
}
}
b[x][y]=1;
bfs(x,y);
printf("%d\n",sum+1);
}
return 0;
} //#include<iostream>
//#include<string.h>
//#include<stdio.h>
//using namespace std;
//int direct[4][2] = { -1, 0, 1, 0, 0, 1, 0, -1 }; /*定义方向, 左右,上下*/
//char map[21][21]; /*输入的字符串*/
//bool mark[21][21]; /*标记走过的路程*/
//bool flag;
//int W, H;
//int Dx, Dy; //记录起始位置@,从这里开始进行搜索
//int ans; //记录满足的个数。初始化为1,因为@也包含在内
///*****底下是核心算法,主要是从
//上下左右这四个方向进行搜索,注意
//满足搜索的条件是不能越界,不能是#,
//还有就是没有搜索过的--》主要是靠mark[i][j]
//来实现*******/
//void DFS( int x, int y )
//{
// mark[x][y] = true;
// for( int k = 0; k < 4; k ++ )
// {
// int p = x + direct[k][0];
// int q = y + direct[k][1];
// if( p >= 0 && q >= 0 && p < H && q < W && !mark[p][q] && map[p][q] != '#' )
// {
// ans ++;
// DFS( p, q );
// }
// }
// return;
//}
//
//int main()
//{
// int i, j, k;
// while( cin >> W >> H && ( W || H ) ) // W -> column, H -> row;
// {
// memset( mark, false, sizeof( mark ) );
// for( i = 0; i < H; i ++ )
// for( j = 0; j < W; j ++ )
// {
// cin >> map[i][j];
// if( map[i][j] == '@' )
// {
// Dx = i;
// Dy = j;
// }
// }
// ans = 1;
// DFS( Dx, Dy );
// cout << ans << endl;
// }
//}
//
//
// //#include <iostream>
//
//using namespace std;
//char a[50][50];
//int m,n;
//int sum;
//void dfs(int i,int j){
// a[i][j]='#';//把搜素到的点变成#
// sum++;//sum用于计数每搜到一个点就记一下数
// if(i-1>=0&&a[i-1][j]=='.')dfs(i-1,j);
// if(i+1<m&&a[i+1][j]=='.')dfs(i+1,j);
// if(j-1>=0&&a[i][j-1]=='.')dfs(i,j-1);
// if(j+1>=0&&a[i][j+1]=='.')dfs(i,j+1);//四个方向搜素
//}
//int main()
//{
// while(cin>>n>>m&&(m+n)){
// for(int i=0; i<m; i++)
// cin>>a[i];
// sum=0;
// for(int i=0; i<m; i++)
// for(int j=0; j<n; j++){
// if(a[i][j]=='@')
// dfs(i,j);
// }
// cout<<sum<<endl;
// }
// return 0;
//}

hdu1312 Red and Black的更多相关文章

  1. HDU1312——Red and Black(DFS)

    Red and Black Problem DescriptionThere is a rectangular room, covered with square tiles. Each tile i ...

  2. HDU1312 Red and Black(DFS) 2016-07-24 13:49 64人阅读 评论(0) 收藏

    Red and Black Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

  3. HDU1312 Red and Black 解读

    递归搜索方法标题,采用递归搜索方法,但是,如果没有迭代计算的真正的政党格. 我们的想法是: 1 每一个搜索为党格要改变电流方向格的值至 '*',或任何其他非'.'的值,代表方格了 2 递归的时候不回复 ...

  4. hdu1312 Red and Black 简单BFS

    简单BFS模版题 不多说了..... 直接晒代码哦.... #include<cstdlib> #include<iostream> #include<cstdio> ...

  5. HDU1312 Red and Black(dfs+连通性问题)

    这有一间铺满方形瓷砖的长方形客房. 每块瓷砖的颜色是红色或者黑色. 一个人站在一块黑色瓷砖上, 他可以从这块瓷砖移动到相邻(即,上下左右)的四块瓷砖中的一块. 但是他只能移动到黑色瓷砖上,而不能移动到 ...

  6. HDU1312 / POJ1979 / ZOJ2165 Red and Black(红与黑) 解题报告

    题目链接:pid=1312" target="_blank">HDU1312 / POJ1979 / ZOJ2165 Red and Black(红与黑) Red ...

  7. 数据结构——HDU1312:Red and Black(DFS)

    题目描述 There is a rectangular room, covered with square tiles. Each tile is colored either red or blac ...

  8. 使用Red Gate Sql Data Compare 数据库同步工具进行SQL Server的两个数据库的数据比较、同步

    Sql Data Compare 是比较两个数据库的数据是否相同.生成同步sql的工具. 这一款工具由Red Gate公司出品,我们熟悉的.NET Reflector就是这个公司推出的,它的SQLTo ...

  9. 使用Red Gate Sql Compare 数据库同步工具进行SQL Server的两个数据库的结构比较、同步

    将测试版的项目同步(部署)到正式版的时候,两个数据库的结构比较与同步时,如果修改数据库的时候没有记录好修改了那些表,很难将两个数据库进行同步 RedGate Sql Compare使用简介说明: 1. ...

随机推荐

  1. zabbix lld使用trapper方式(zabbix_sender)

    自动发现脚本文件输出格式: { "data": [ { "{#BIND_PERF}": "BIND INCOMING QUERY" }, { ...

  2. EOJ Monthly 2019.2 (based on February Selection) F.方差

    题目链接: https://acm.ecnu.edu.cn/contest/140/problem/F/ 题目: 思路: 因为方差是用来评估数据的离散程度的,因此最优的m个数一定是排序后连续的,所以我 ...

  3. js_模块化

    https://www.cnblogs.com/scq000/p/10647128.html

  4. Hibernate5笔记5--关联关系映射

    关联关系映射: 关联关系,是使用最多的一种关系,非常重要.在内存中反映为实体关系,映射到DB中为主外键关系.实体间的关联,即对外键的维护.关联关系的发生,即对外键数据的改变. 外键:外面的主键,即,使 ...

  5. Indepence Mode 备份 weblogic

    一般不在administation server 停止这个模式 管理服务器挂了,不会影响其他服务器的运行 备份一个domain copy  一个  /bin  把启动的脚本做一个修改  里面的doma ...

  6. Robotium测试套管理测试用例

    前提:已写好测试用例 新建个测试套MyTestSuite管理你需要跑的测试用例,或者将相同功能的测试用例归纳到一个测试套中 package com.robotium.test.testsuite; i ...

  7. 使用UDP和TCP协议的各种应用和应用层协议

    IGMP和ICMP是传输层协议

  8. 学习记录:mongodb里插入整型值

    =============================================== 2018/1/24_第1次修改                       ccb_warlock == ...

  9. Matlab读取txt中用空格分隔的数据文件到矩阵

    转载...哪儿 忘记了 由于要做的项目中涉及到数据处理,初涉及到matlab.今天需要把一组只用空格分开的数据读取到一个三维矩阵,然后对这个矩阵进行处理. 思路是:首先用importdata读入txt ...

  10. FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

    FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...