HDU 1312 Red and Black(bfs)

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

.#.........

.#.#######.

.#.#.....#.

.#.#.###.#.

.#.#[email protected]#.#.

.#.#####.#.

.#.......#.

.#########.

...........

11 6

..#..#..#..

..#..#..#..

..#..#..###

..#..#..#@.

..#..#..#..

..#..#..#..

7 7

..#.#..

..#.#..

###.###

[email protected]

###.###

..#.#..

..#.#..

0 0

Sample Output

45

59

6

13

题目简单翻译:

从‘@’点出发,问能到达的最多的点有多少,‘#’不可经过,计算结果包括‘@’。

解题思路:

广度优先搜索,直接求出到过多少个点。

代码:

 1 #include<cstdio>
 2 #include<cstring>
 3
 4 using namespace std;
 5 int n,m,sx,sy;
 6 char mp[24][24];
 7 int vis[24][24];
 8 int dx[]={0,0,1,-1};
 9 int dy[]={1,-1,0,0};
10 bool check(int x,int y)
11 {
12     return x>=0&&x<n&&y>=0&&y<m;
13 }
14 struct node
15 {
16     int x,y;
17 }St[1000];
18
19 int bfs()//手写的队列,队列的尾端就是到达的点的数量
20 {
21     memset(vis,0,sizeof vis);
22     int st=0,en=1;
23     vis[St[0].x][St[0].y]=1;
24     while(st<en)
25     {
26         node e=St[st++];
27         for(int i=0;i<4;i++)
28         {
29             node w=e;
30             w.x=e.x+dx[i],w.y=e.y+dy[i];
31             if(check(w.x,w.y)&&vis[w.x][w.y]==0&&mp[w.x][w.y]!=‘#‘)
32             {
33                 vis[w.x][w.y]=1;
34                 St[en++]=w;
35             }
36         }
37     }
38     return en;
39 }
40
41 int main()
42 {
43     while(scanf("%d%d",&m,&n)!=EOF&&(n||m))
44     {
45         for(int i=0;i<n;i++)
46         {
47             scanf("%s",mp[i]);
48             for(int j=0;j<m;j++)
49                 if(mp[i][j]==‘@‘)
50                     St[0].x=i,St[0].y=j;
51         }
52         printf("%d\n",bfs());
53     }
54     return 0;
55 }

Red and Black

时间: 2024-11-06 14:01:56

HDU 1312 Red and Black(bfs)的相关文章

HDU 1312 Red and Black (BFS)

Red and Black Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status 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.

hdu 1312 Red and Black(BFS水题)

Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9684    Accepted Submission(s): 6021 Problem Description There is a rectangular room, covered with square tiles. Each tile is colore

HDU 1312 Red and Black(bfs,dfs均可,个人倾向bfs)

题目代号:HDU 1312 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 20820    Accepted Submission(s): 12673 Problem Description There i

HDU 1312 Red and Black (dfs)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17773    Accepted Submission(s): 10826 Problem Description There is a rectangula

HDU 1180——诡异的楼梯( BFS)

诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 8717    Accepted Submission(s): 2148 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖

HDU 1312:Red and Black(DFS搜索)

HDU 1312:Red and Black Time Limit:1000MS     Memory Limit:30000KB     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

Red and Black (BFS)poj 1979

Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 26181   Accepted: 14213 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

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): 10286    Accepted Submission(s): 6426 Problem Description There is a rectangular room, covered with square tiles. Each tile is colo

杭电 HDU 1312 Red and Black(超级简单dfs)

Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12907    Accepted Submission(s): 7983 Problem Description There is a rectangular room, covered with square tiles. Each tile is colo