poj2386 dfs
2018-03-28 09:25
302 查看
题意:有一个N*M的院子,八连通的积水是认为被连接在一的,求有几个水洼。
思路:从每个M开始向八个方向搜,把搜过的M变成.知道搜不到为止。时间复杂度O(8*N*M)
Sample Input10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.Sample Output3
思路:从每个M开始向八个方向搜,把搜过的M变成.知道搜不到为止。时间复杂度O(8*N*M)
Sample Input10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.Sample Output3
#include<iostream> using namespace std; int n,m,s; char map[109][109]; int dir[8][2]={{0,-1},{0,1},{-1,0},{-1,1},{-1,-1},{1,0},{1,-1},{1,1}}; int checkEdge(int x,int y) { if(x>=0&&x<n&&y>=0&&y<m&&map[x][y]=='W') { return 1; } else { return 0; } } void dfs(int x,int y) { map[x][y]='.'; for(int i=0;i<8;i++) { if(checkEdge(x+dir[i][0],y+dir[i][1])) { dfs(x+dir[i][0],y+dir[i][1]); } } } int main() { while(cin>>n>>m) { for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { cin>>map[i][j]; } } s=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(map[i][j]=='W') { dfs(i,j); s+=1; } } } cout<<s<<endl; } return 0; }
相关文章推荐
- poj2386 (DFS)
- POJ2386 Lake Counting【DFS】
- POJ2386 Lake Counting(DFS,八连通块)
- UVA 572&& PoJ2386 两道DFS入门最经典的题目
- poj2386 DFS
- POJ2386 Lake Counting简单dfs
- poj2386 Lake Counting(简单DFS)
- poj2386 Lake Counting dfs入门 TWT Tokyo Olympic 2combo-2
- POJ2386:Lake Counting(dfs)
- poj2386(BFS与DFS)
- poj2386(dfs)
- POJ2386:Lake Counting(DFS)
- DFS(POJ2386)精简版
- poj2386----简单dfs,a一送一
- poj2386 Lake Counting DFS
- HDU1241&POJ2386 dfs简单题
- POJ2386 Lake Counting 【DFS】
- 简单dfs--poj2386
- POJ2386 Lake Counting (dfs)
- bfs和dfs:poj2386和leetcode130