#include<iostream> #include<cstdio> int n,m,sum,a[50][50]={0}; char b[50][50]; using namespace std; void dfs(int i,int j) { sum++; a[i][j]=1; if(!a[i-1][j]&&i-1>=0&&b[i-1][j]==b[i][j]) dfs(i-1,j); if(!a[i][j-1]&&j-1>=0&&b[i][j-1]==b[i][j]) dfs(i,j-1); if(!a[i][j+1]&&j+1<m&&b[i][j+1]==b[i][j]) dfs(i,j+1); if(!a[i+1][j]&&i+1<n&&b[i+1][j]==b[i][j]) dfs(i+1,j); } int main() { int i,j,max=0; cin>>n>>m; for(i=0;i<n;i++) scanf("%s",b[i]); for(i=0;i<n;i++) for(j=0;j<m;j++) { sum=0; if(!a[i][j]) { dfs(i,j); if(max<sum) max=sum; } } cout<<max<<endl; return 0; }
HDU 1312
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string> #include<cmath> #include<set> #include<vector> #include<stack> #include<ctime> #include<cstdlib> #define mem(a,b) memset(a,b,sizeof(a)) typedef long long ll; using namespace std; int n,m,sum; char a[22][22]; void dfs(int x,int y) { if(x<0||x>=n||y<0||y>=m||a[x][y]=='#') return; sum++; a[x][y]='#'; dfs(x,y+1); dfs(x,y-1); dfs(x+1,y); dfs(x-1,y); } int main() { while(cin>>m>>n&&(m||n)) { int i,j,x1,y1,flag=1; sum=0; for(i=0;i<n;i++) { cin>>a[i]; if(flag) { for(j=0;j<m;j++) if(a[i][j]=='@') { x1=i; y1=j; flag=0; } } } dfs(x1,y1); cout<<sum<<endl; } return 0; }