标签:
1 #include <cstdio> 2 using namespace std; 3 int pip[11][4]={{1,1,0,0},{0,1,1,0},{1,0,0,1},{0,0,1,1}, 4 {0,1,0,1},{1,0,1,0},{1,1,1,0},{1,1,0,1}, 5 {1,0,1,1},{0,1,1,1},{1,1,1,1}}; 6 int f[3000]; char map[50][50]; 7 int sf(int x) { return x==f[x]?x:f[x]=sf(f[x]);}; 8 int main(){ 9 int m,n; 10 while(scanf("%d%d",&m,&n),m+n>0){ 11 for(int i=0;i<m*n;i++) f[i]=i; 12 for(int i=0;i<m;i++) scanf("%s",&map[i]); 13 for(int i=0;i<m;i++) //开始处理 14 for(int j=0;j<n;j++){ 15 int x=map[i][j]-‘A‘; 16 if(i+1<m){ 17 int d=map[i+1][j]-‘A‘; 18 if(pip[x][3]&&pip[d][1]){//和右方连 19 int fx=sf(i*n+j); 20 int fa=sf((i+1)*n+j); 21 f[fx]=fa; 22 } 23 } 24 if(j+1<n){ 25 int r=map[i][j+1]-‘A‘; 26 if(pip[x][2]&&pip[r][0]){//和下方连 27 int fx=sf(i*n+j); 28 int fa=sf(i*n+j+1); 29 f[fx]=fa; 30 } 31 } 32 } 33 int ans=0; 34 for(int i=0;i<m*n;i++) if(f[i]==i) ans++; 35 printf("%d\n",ans); 36 } return 0; 37 }
标签:
原文地址:http://www.cnblogs.com/nicetomeetu/p/5164676.html