标签:oid -- memset net class set queue end poj
直接上中文了
Descriptions:
Input
Line 1: N 和 M
Output
Line 1: 池塘的数量
Sample Input
10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W.
Sample Output
3
Hint
#include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include <cmath> #include <deque> #include <vector> #include <queue> #include <string> #include <cstring> #include <map> #include <stack> #include <set> #include <sstream> #define mod 1000000007 #define eps 1e-6 #define ll long long #define INF 0x3f3f3f3f #define MEM(x,y) memset(x,y,sizeof(x)) #define Maxn 1000 using namespace std; int n,m; int num;//总共几种颜色 int vis[Maxn][Maxn];//染色计数 char mp[Maxn][Maxn];//原始地图 int dt[][2]= {{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,-1},{-1,1}};//八个方向 bool judge(int xx,int yy)//判断是否满足条件 { if(!vis[xx][yy]&&mp[xx][yy]==‘W‘)//没有被染色且这个地方是"W" return true; return false; } void dfs(int x,int y) { if(vis[x][y]) return; vis[x][y]=num; for(int i=0;i<8;i++)//八个方向 { int tx=x+dt[i][0]; int ty=y+dt[i][1]; if(judge(tx,ty)) dfs(tx,ty); } } int main() { num=0; MEM(vis,0); cin>>n>>m; for(int i=0;i<n;i++)//读入地图 for(int j=0;j<m;j++) cin>>mp[i][j]; for(int i=0;i<n;i++)//开始搜索 for(int j=0;j<m;j++) { if(judge(i,j)) { num++; dfs(i,j); } } cout<<num<<endl; }
【POJ - 2386】Lake Counting (dfs+染色)
标签:oid -- memset net class set queue end poj
原文地址:https://www.cnblogs.com/sky-stars/p/11166538.html