首页 > 代码库 > HDU 1241 Oil Deposits
HDU 1241 Oil Deposits
很简单很经典的DFS题目
题意:
‘@‘代表一块油田,在以它为中心的九宫格里的‘@‘,也算同在一块油田,问所给矩阵中有多少块油田
思路:
遍历地图中的每一个格子,如果遇到‘@‘,则DFS,将这块变为‘*‘,然后八个方向继续DFS
这样整个搜索完毕以后,这个map就全部变为‘*‘了
第一次居然忘了做数组越界检测,结果还AC了,不过以后DFS千万千万要记得这个!
=_=!!
1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 char map[103][103]; 8 int dir[8][2] = {{0, 1},{0, -1},{1, 0}, {-1, 0},{1, 1}, {1, -1},{-1, 1},{-1, -1}}; 9 int m, n;10 11 void DFS(int x, int y)12 {13 map[x][y] = ‘*‘;14 for(int i = 0; i < 8; ++i)15 {16 int xx = x + dir[i][0];17 int yy = y + dir[i][1];18 if( xx>=0 && xx<m && yy>=0 && yy<n19 && map[xx][yy] == ‘@‘)20 {21 map[xx][yy] = ‘*‘;22 DFS(xx, yy);23 }24 }25 }26 27 int main(void)28 {29 #ifdef LOCAL30 freopen("1241in.txt", "r", stdin);31 #endif32 33 while(scanf("%d%d", &m, &n) == 2)34 {35 if(m == 0 && n == 0)36 break;37 for(int i = 0; i < m; ++i)38 scanf("%s", map[i]);39 int cnt = 0;40 for(int i = 0; i < m; ++i)41 for(int j = 0; j < n; ++j)42 {43 if(map[i][j] == ‘@‘)44 {45 ++cnt;46 DFS(i, j);47 }48 }49 50 printf("%d\n", cnt);51 }52 return 0;53 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。