Hdu 1312 Red and Black 深搜

来源:互联网 发布:中国国库有多少钱知乎 编辑:程序博客网 时间:2024/06/05 14:10

Red and Black 
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) 
Total Submission(s): 13508 Accepted Submission(s): 8375

Problem 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 

13

深搜简单题目

题意: n*m的方阵有红格或是黑格,只能走黑格 
每次只能走上下左右四个紧邻方向的格子,求 
这个人最后能走多少个黑格子。

#include<stdio.h>int di[4][2]={{1,0},{-1,0},{0,-1},{0,1}};int sum;void dfs(char map[][20],int ii,int jj,int n,int m){    int i,j,k,dx,dy;    if(ii<0||jj<0||ii>=m||jj>=n){    return;}    for(k=0;k<4;k++){    dx=ii+di[k][0];    dy=jj+di[k][1];    if(dx<0||dy<0||dx>=m||dy>=n||map[dx][dy]=='#'){continue;}sum++;map[dx][dy]='#';dfs(map,dx,dy,n,m);}}int main(){int n,m,i,j,k;int begin,end;char map[20][20],str[21];while(scanf("%d%d",&n,&m),m){getchar();sum=1;for(i=0;i<m;i++){scanf("%s",str);getchar();for(j=0;j<n;j++){map[i][j]=str[j];if(map[i][j]=='@'){begin=i;end=j;}}}map[begin][end]='#';    dfs(map,begin,end,n,m);printf("%d\n",sum);}return 0;} 


原创粉丝点击