在图的最外面套一层0(防止到头)
然后搜索图有多少块在
'0'有两块0,一块1
'1'有一块0,一块1
其余情况不存在
#include<stdio.h> int n,m,z[2],dx[4]={0,1,0,-1},dy[4]={1,0,-1,0}; char s[102][103]; void dfs(int x,int y){ if(x<0||x>=n||y<0||y>=m) return; char c=s[x][y]; s[x][y]='.'; for(int i=0;i<4;i++){ int xx=x+dx[i],yy=y+dy[i]; if(s[xx][yy]==c) dfs(xx,yy); } } int main(){ int i,j; while(~scanf("%d%d",&n,&m)){ n+=2;m+=2; for(i=0;i<m;i++) s[0][i]=s[n-1][i]='0'; for(i=1;i<n-1;i++){ scanf("%s",s[i]+1); s[i][0]=s[i][m-1]='0'; } for(z[0]=z[1]=i=0;i<n;i++) for(j=0;j<m;j++) if(s[i][j]!='.'){ z[s[i][j]-'0']++; dfs(i,j); } if(z[0]==1&&z[1]==1) puts("1"); else if(z[0]==2&&z[1]==1) puts("0"); else puts("-1"); } return 0; }