ZJNU 2208 - 你渴望力量吗

在图的最外面套一层0(防止到头)

然后搜索图有多少块在

'0'有两块0,一块1

'1'有一块0,一块1

其余情况不存在

 1 #include<stdio.h>
 2 int n,m,z[2],dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
 3 char s[102][103];
 4 void dfs(int x,int y){
 5     if(x<0||x>=n||y<0||y>=m)
 6         return;
 7     char c=s[x][y];
 8     s[x][y]='.';
 9     for(int i=0;i<4;i++){
10         int xx=x+dx[i],yy=y+dy[i];
11         if(s[xx][yy]==c)
12             dfs(xx,yy);
13     }
14 }
15 int main(){
16     int i,j;
17     while(~scanf("%d%d",&n,&m)){
18         n+=2;m+=2;
19         for(i=0;i<m;i++)
20             s[0][i]=s[n-1][i]='0';
21         for(i=1;i<n-1;i++){
22             scanf("%s",s[i]+1);
23             s[i][0]=s[i][m-1]='0';
24         }
25         for(z[0]=z[1]=i=0;i<n;i++)
26             for(j=0;j<m;j++)
27                 if(s[i][j]!='.'){
28                     z[s[i][j]-'0']++;
29                     dfs(i,j);
30                 }
31         if(z[0]==1&&z[1]==1)
32             puts("1");
33         else if(z[0]==2&&z[1]==1)
34             puts("0");
35         else
36             puts("-1");
37     }
38     
39     return 0;
40 }

猜你喜欢

转载自www.cnblogs.com/stelayuri/p/12236633.html