Oil Deposits HDU - 1241 (简单bfs)(找有多少个连通块)

Posted lllaih

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oil Deposits HDU - 1241 (简单bfs)(找有多少个连通块)相关的知识,希望对你有一定的参考价值。

题目链接:https://cn.vjudge.net/problem/HDU-1241

注意:搜索八个方向

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <queue>
 5 #include <stack>
 6 #include <algorithm>
 7 #include <cmath>
 8 #include <map>
 9 #define mem(a,b) memset(a,b,sizeof(a));
10 using namespace std;
11 #define INF 0x3f3f3f3f
12 typedef long long ll;
13 int dir[8][2] = 0,1,0,-1,1,0,-1,0,1,-1,1,1,-1,1,-1,-1;
14 const int maxn = 5000005;
15 int r,c,vis[105][105];
16 string s[105];
17 struct node
18     int x,y;
19     node(int x1,int y1):x(x1),y(y1);
20 ;
21 void bfs(int x,int y) 
22     queue<node>q;
23     vis[x][y] = 1;
24     q.push(node(x,y));
25     while(!q.empty()) 
26         node temp = q.front();
27         q.pop();
28         for(int i = 0; i < 8; i++) 
29             int fx = temp.x + dir[i][0],fy = temp.y + dir[i][1];
30             if(fx >=0 && fx < r && fy >=0 && fy < c && !vis[fx][fy] && s[fx][fy] == @)
31             
32                 vis[fx][fy] = 1;
33                 q.push(node(fx,fy));
34             
35         
36     
37 
38 int main()
39 
40     while(cin >> r >> c && r &&  c) 
41         mem(vis,0);
42         for(int i = 0; i < r; i++) 
43             cin >> s[i];
44         
45         int ans = 0;
46         for(int i = 0; i < r; i++) 
47             for(int j = 0; j < c; j++) 
48                 if(s[i][j] == @ && !vis[i][j]) 
49                     bfs(i,j);
50                     ans++;
51                 
52             
53         
54         cout << ans << endl;
55     
56     return 0;
57 

 

以上是关于Oil Deposits HDU - 1241 (简单bfs)(找有多少个连通块)的主要内容,如果未能解决你的问题,请参考以下文章

HDU - 1241:Oil Deposits

HDU 1241Oil Deposits (DFS)

HDU - 1241 E - Oil Deposits

Oil Deposits hdu-1241 DFS

(经典DFS)HDU_1241 Oil Deposits

HDU 1241Oil Deposits---(dfs)