题意:@代表油田 8个方向上还有@就相连 相当于求图中连通子图的个数
Sample Input
1 1 // n m
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
Sample Output
0
1
2
2
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 using namespace std; 7 8 int d[8][2] = {{1,0},{1,-1},{1,1},{0,-1},{0,1},{-1,0},{-1,-1},{-1,1}}; 9 char map[110][110] ; 10 11 int n , m ; 12 13 void dfs(int x , int y) 14 { 15 int fx , fy ; 16 int i ; 17 map[x][y] = ‘*‘ ; 18 for (i = 0 ; i < 8 ; i++) 19 { 20 fx = x + d[i][0] ; 21 fy = y + d[i][1] ; 22 if (fx>=0 && fx<n && fy>=0 && fy<m && map[fx][fy] == ‘@‘) 23 { 24 dfs(fx,fy) ; 25 } 26 } 27 } 28 29 int main() 30 { 31 //freopen("in.txt","r",stdin) ; 32 33 34 while (scanf("%d %d" , &n , &m) !=EOF) 35 { 36 if (n == 0 && m == 0) 37 break ; 38 int i , j ; 39 40 41 for (i = 0 ; i < n ; i++) 42 { 43 for (j = 0 ; j < m ; j++) 44 { 45 cin>>map[i][j]; //用scanf一直WA=.= 46 } 47 48 } 49 int sum = 0 ; 50 for (i = 0 ; i < n ; i++) 51 for (j = 0 ; j < m ; j++) 52 { 53 if (map[i][j] == ‘@‘) 54 { 55 sum++ ; 56 57 dfs(i,j) ; 58 } 59 } 60 printf("%d\n" , sum) ; 61 62 } 63 64 return 0; 65 }
时间: 2024-10-20 17:35:17