hdu 1312 Red and Black

本题来自:http://acm.hdu.edu.cn/showproblem.php?pid=1312

英语题意翻译:在宽、高不超过20的范围里,从@开始,统计四周有几个.(前后左右,斜方不算)。

英语不好,翻译了很久···

 1 #include <stdio.h>
 2 #include<string.h>
 3 char graph[21][21],visted[21][21];
 4 int w,h,ans;
 5 int tab[4][2]={1,0,0,1,-1,0,0,-1};
 6 
 7 void dfs(int x,int y)
 8 {
 9     visted[x][y]=1;
10     ans++;
11     for(int i=0;i<4;i++)
12     {
13         int xx=x+tab[i][0];
14         int yy=y+tab[i][1];
15         if(0<=xx&&xx<h&&0<=yy&&yy<w&&graph[xx][yy]!='#'&&visted[xx][yy]!=1)
16             dfs(xx,yy);
17     }
18 }
19 
20 void solve()
21 {
22     for(int i=0;i<h;i++)
23         for(int j=0;j<w;j++)
24             if(graph[i][j]=='@')
25             {
26                 dfs(i,j);
27             }
28     printf("%d\n",ans);
29 }
30 int main()
31 {
32     while(~scanf("%d%d",&w,&h)&&(w||h))
33     {
34         getchar();
35         memset(visted,0,sizeof(visted));
36         memset(graph,'\0',sizeof(graph));
37         ans=0;
38         for(int i=0;i<h;i++)
39         {
40             for(int j=0;j<w;j++)
41                 scanf("%c",&graph[i][j]);
42             getchar();
43         }
44         solve();
45     }
46     return 0;
47 }

 

posted @ 2014-01-12 14:28  橙&子  阅读(236)  评论(0)    收藏  举报