第六章部分例题

图:油田

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 
 5 //置顶向下的设计
 6 using namespace std;
 7 
 8 const int maxn=10000;
 9 char pic[maxn][maxn];
10 int idx[maxn][maxn];
11 int m,n;
12 
13 void dfs(int i,int j,int id)
14 {
15     if(i<0 || i>=m || j<0 || j>=n) return;
16     if(pic[i][j]!='@' || idx[i][j]!=0) return;    
17 
18     idx[i][j]=id;
19 
20     for(int r=-1;r<=1;r++)
21         for(int p=-1;p<=1;p++)
22             if(r!=0 || p!=0) dfs(i+r,j+p,id);
23 }
24 
25 int main()
26 {
27     
28     cin>>m>>n;
29 
30     for(int i=0;i<m;i++) scanf("%s",pic[i]);
31 
32     memset(idx,0,sizeof(idx));
33 
34     int cnt=0;
35 
36     for(int i=0;i<m;i++)
37         for(int j=0;j<n;j++)
38             if(idx[i][j]==0 && pic[i][j]=='@') dfs(i,j,++cnt);
39 
40     printf("%d
", cnt);
41 
42     return 0;
43 }
Yosoro
原文地址:https://www.cnblogs.com/tclan126/p/7291907.html