HDU-1241 Oil Deposits

题目:https://vjudge.net/problem/HDU-1241#author=AlwaysInsistOn

分析:简单bfs,输入后对每一个找到的'@’进行广搜并计数,将广搜找到的'@'改为'*',最后输出即可。

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 int m,n;
 4 char c[110][110];
 5 int ans;
 6 int l[10100][2];
 7 int q[9]={0,-1,-1,0,1,1,1,0,-1};
 8 int p[9]={0,0,1,1,1,0,-1,-1,-1};
 9 int check(int x,int y){
10     if(x>=0&&x<m&&y>=0&&y<n&&c[x][y]=='@')return 1;
11     else return 0;
12 }
13 void bfs(int x,int y){
14     memset(l,0,sizeof(l));
15     c[x][y]='*';
16     int h=0,r=1;
17     l[h][0]=x;
18     l[h][1]=y;
19     while(h<r){
20         int x1,y1;
21         for(int i=1;i<=8;i++){
22             x1=l[h][0]+q[i];
23             y1=l[h][1]+p[i];
24             if(check(x1,y1)){
25                 l[r][0]=x1;
26                 l[r][1]=y1;
27                 r++;
28                 c[x1][y1]='*';
29             }
30         }
31         h++;
32     }
33 }
34 int main(void){
35     while(scanf("%d",&m)==1&&m){
36         scanf("%d",&n);
37         ans=0;
38         memset(c,'',sizeof(c));
39         for(int i=0;i<m;i++)scanf("%s",c[i]);
40         for(int i=0;i<m;i++){
41             for(int j=0;j<n;j++){
42                 if(c[i][j]=='@'){
43                     ans++;
44                     bfs(i,j);
45                 }
46             }
47         }
48         printf("%d
",ans);
49     }
50     return 0;
51 }
原文地址:https://www.cnblogs.com/yanying7/p/12304154.html