|
这道题是本蒟蒻昨天考试的一道题,拿了满分(开心)。
这道题是一道搜索,深搜和广搜都可以。我写的是深搜,不用回溯。然后上参考代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,ans,sum,maxn; 4 char a[3005][3005]; 5 bool f[3005][3005]; 6 void dfs(int x,int y) 7 { 8 if(x<1||x>m||y<1||y>n||f[x][y]==true||a[x][y]=='0') return;//返回条件 9 sum++;//记录最大球迷群体 10 f[x][y]=true;//标记 11 dfs(x-1,y-1);//向八个方向搜索 12 dfs(x-1,y); 13 dfs(x-1,y+1); 14 dfs(x,y-1); 15 dfs(x,y+1); 16 dfs(x+1,y-1); 17 dfs(x+1,y); 18 dfs(x+1,y+1); 19 } 20 int main() 21 { 22 //freopen("fans.in","r",stdin); 23 //freopen("fans.out","w",stdout); 24 scanf("%d,%d ",&m,&n);//输入长和宽 25 for(int i=1;i<=m;i++) 26 { 27 for(int j=1;j<=n;j++) 28 { 29 char ch; 30 a[i][j]=getchar();//用getchar读入,先读入数,再读入逗号和换行 31 ch=getchar(); 32 } 33 } 34 for(int i=1;i<=m;i++) 35 { 36 for(int j=1;j<=n;j++) 37 { 38 if(a[i][j]=='1'&&f[i][j]==false)//如果是球迷并且没搜过就搜索 39 { 40 ans++;//统计有几个球迷群体 41 dfs(i,j);//搜索 42 maxn=max(maxn,sum);//统计最大球迷群体 43 sum=0;//把计数的变量赋成零 44 } 45 } 46 } 47 printf("%d,%d",ans,maxn);//输出有几个球迷群体和最大球迷群体 48 return 0;//完美结束 49 }