1 #include<stdio.h> 2 #include<string.h> 3 char map[110][110]; 4 int move[8][2]={1,0,-1,0,0,1,0,-1,1,1,-1,-1,1,-1,-1,1};//兩個座標一組 分爲8組 5 int h,w; 6 void dfs(int x,int y)//定義dfs函數,主函數找到了@,dfs啓動,尋找主函數找到的@八面存在的@ 7 { 8 int next_x,next_y,i; 9 map[x][y]='*';//把找到的@變爲*,以避免重複搜索 10 for(i=0;i<8;i++) 11 { 12 next_x=x+move[i][0];//[0]表示兩個座標一組的第一個[i]表示兩個座標一組的第幾組 13 next_y=y+move[i][1];//[1]表示兩個座標一組的第二個[i]表示兩個座標一組的第幾組 14 if(next_x>=0&&next_x<h&&next_y>=0&&next_y<w) 15 { 16 if(map[next_x][next_y]=='@') 17 { 18 dfs(next_x,next_y); 19 } 20 } 21 } 22 } 23 int main()//主函數開始,尋找第一個@ 24 { 25 int i,j,sum; 26 while(scanf("%d%d",&h,&w)&&(h!=0||w!=0)) 27 { 28 for(i=0;i<h;i++) 29 scanf("%s",map[i]); 30 sum=0; 31 for(i=0;i<h;i++) 32 { 33 for(j=0;j<w;j++) 34 { 35 if(map[i][j]=='@') 36 { 37 dfs(i,j);//轉移到dfs函數,由dfs函數開始搜索主函數找到@的八面存在的@ 38 sum++; 39 } 40 } 41 } 42 printf("%d\n",sum); 43 } 44 return 0; 45 }