hdu1241较简单的搜索
#include<stdio.h> #include<string.h> int dir[8][2]={{0,1},{1,0},{0,-1},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1}}; int z; char a[110][110]; int b[110][110]; void sousuo(int xi,int xj) { for(int i=0;i<=7;i++) { if(a[xi+dir[i][0]][xj+dir[i][1]]=='@'&&b[xi+dir[i][0]][xj+dir[i][1]]==0) { b[xi+dir[i][0]][xj+dir[i][1]]=z; // printf("xi=%d xj=%d\n",xi,xj); sousuo(xi+dir[i][0],xj+dir[i][1]); } } } int main() { int m,n,i,j; while(scanf("%d%d",&m,&n)!=EOF) { getchar(); z=0; if(m==0) break; for(i=0;i<=m-1;i++) { gets(a[i]); //不要加getchar(),不然会错,检查了好久; } for(i=0;i<=m-1;i++) { for(j=0;j<=n-1;j++) {b[i][j]=0; //printf("%c",a[i][j]); } // printf("\n"); } for(i=0;i<=m-1;i++) { for(j=0;j<=n-1;j++) if(a[i][j]=='@'&&b[i][j]==0) {z++;b[i][j]=z;sousuo(i,j);/*printf("i=%d,j=%d\n",i,j);*/} } /* for(i=0;i<=m-1;i++) { for(j=0;j<=n-1;j++) printf("%d",b[i][j]); printf("\n"); }*/ printf("%d\n",z); } }