HDU 1241 Oil Deposits
题目大意是找到独立的油田个数,所谓独立就是跟它相邻的八个方向上都不能再有别的油田。思路就是每遇到一个'@'都要将它周围的所有'@'都给改成'*',用DFS跟BFS都可以,这里是DFS的代码:
AC code:
View Code
1 #include <iostream>
2 #define MAX 101
3 using namespace std;
4 int m, n, count;
5 char map[MAX][MAX];
6 int dir[8][2] = {{0, 1}, {0, -1}, {1, 0},{-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};//八个方向
7
8 int inmap(int x, int y)//判断是否在图内
9 {
10 return x >= 0 && x < m && y >= 0 && y < n;
11 }
12 void dfs(int x, int y)
13 {
14 for(int i = 0; i < 8; i++)
15 {
16 int tx = x + dir[i][0];
17 int ty = y + dir[i][1];
18 if(inmap(tx, ty) && map[tx][ty] == '@')//将临近的'@'全改为'*'
19 {
20 map[tx][ty] = '*';
21 dfs(tx, ty);
22 }
23 }
24 }
25 int main()
26 {
27 while(scanf("%d%d", &m, &n) != EOF && m)
28 {
29 int i, j;
30 count = 0;
31 memset(map, 0, sizeof(map));
32 for(i = 0; i < m; i++)
33 {
34 scanf("%s", map[i]);
35 }
36 for(i = 0; i < m; i++)
37 for(j = 0; j < n; j++)
38 {
39 if(map[i][j] == '@')//每遇到一个'@'都要进行一次DFS
40 {
41 dfs(i, j);
42 count ++;
43 }
44 }
45 printf("%d\n", count);
46 }
47 return 0;
48 }
