这道题主要注意输入的问题,以及对周围搜索时的注意,要使用递归,多次调用,附上一组数据
11 20
*@*@*@@@**@*@**@@@**
***@*@*@*@*@****@**@
*@*@*@*@*@*@********
@*************@@**@*
@*@*@*@*@***********
*@*@*@*@*@*@*@*@****
**********@*@*@*****
******@*@*@*@*@*@***
**@*@***************
***********@*@*@*@**
*@*@*@******@*******
20
1 #include<stdio.h> 2 char xx[106][106]; 3 int dps(int i,int j) 4 { 5 if(xx[i-1][j-1]=='@') 6 { 7 xx[i-1][j-1]='#'; 8 dps(i-1,j-1); 9 } 10 if(xx[i-1][j]=='@') 11 { 12 xx[i-1][j]='#'; 13 dps(i-1,j); 14 } 15 if(xx[i-1][j+1]=='@') 16 { 17 xx[i-1][j+1]='#'; 18 dps(i-1,j+1); 19 } 20 if(xx[i][j-1]=='@') 21 { 22 xx[i][j-1]='#'; 23 dps(i,j-1); 24 } 25 if(xx[i][j+1]=='@') 26 { 27 xx[i][j+1]='#'; 28 dps(i,j+1); 29 } 30 if(xx[i+1][j-1]=='@') 31 { 32 xx[i+1][j-1]='#'; 33 dps(i+1,j-1); 34 } 35 if(xx[i+1][j]=='@') 36 { 37 xx[i+1][j]='#'; 38 dps(i+1,j); 39 } 40 if(xx[i+1][j+1]=='@') 41 { 42 xx[i+1][j+1]='#'; 43 dps(i+1,j+1); 44 } 45 } 46 int main() 47 { 48 int m,n,i,j,ans; 49 while(1) 50 { 51 scanf("%d%d",&m,&n); 52 if(m==0) break; 53 for(i=0;i<=104;i++) 54 for(j=0;j<=104;j++) 55 xx[i][j]='*'; 56 for(i=1;i<=m;i++) 57 scanf("%s",xx[i]); 58 ans=0; 59 for(i=1;i<=m;i++) 60 for(j=0;j<=n;j++) 61 { 62 if(xx[i][j]=='@') 63 { 64 xx[i][j]='#'; 65 ans++; 66 dps(i,j); 67 } 68 /*else if(xx[i-1][j-1]!='#'&&xx[i-1][j]!='#'&&xx[i-1][j+1]!='#'&&xx[i][j-1]!='#'&&xx[i][j+1]!='#'&&xx[i+1][j-1]!='#'&&xx[i+1][j]!='#'&&xx[i+1][j+1]!='#') 69 { 70 ans++; 71 if(xx[i-1][j-1]=='@') xx[i-1][j-1]='#'; 72 if(xx[i-1][j]=='@') xx[i-1][j]='#'; 73 if(xx[i-1][j+1]=='@') xx[i-1][j+1]='#'; 74 if(xx[i][j-1]=='@') xx[i][j-1]='#'; 75 if(xx[i][j+1]=='@') xx[i][j+1]='#'; 76 if(xx[i+1][j-1]=='@') xx[i+1][j-1]='#'; 77 if(xx[i+1][j]=='@') xx[i+1][j]='#'; 78 if(xx[i+1][j+1]=='@') xx[i+1][j+1]='#'; 79 } 80 }*/ 81 82 } 83 printf("%d\n",ans); 84 /* for(i=1;i<=m;i++) 85 { 86 for(j=0;j<=n;j++) 87 printf("%c",xx[i][j]); 88 printf("\n"); 89 }*/ 90 } 91 return 0; 92 }