P1596 [USACO10OCT]Lake Counting S
阿新 • • 發佈:2020-09-19
flood-fill
const int N=110; char g[N][N]; int n,m; int res; inline bool check(int x,int y) { return x>=0 && x<n && y>=0 && y<m; } void bfs(int x,int y) { queue<PII> q; q.push({x,y}); while(q.size()) { PII t=q.front(); q.pop(); for(int i=0;i<8;i++) { int a=t.fi+dx8[i],b=t.se+dy8[i]; if(!check(a,b)) continue; if(g[a][b] == 'W') { g[a][b]='.'; q.push({a,b}); } } } } int main() { cin>>n>>m; for(int i=0;i<n;i++) scanf("%s",&g[i]); for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(g[i][j] == 'W') bfs(i,j),res++; cout<<res<<endl; //system("pause"); }
dfs
const int N=110; char g[N][N]; int n,m; int res; inline bool check(int x,int y) { return x>=0 && x<n && y>=0 && y<m; } void dfs(int x,int y) { if(g[x][y] == '.') return; g[x][y]='.'; for(int i=0;i<8;i++) { int a=x+dx8[i],b=y+dy8[i]; if(check(a,b) && g[a][b] == 'W') dfs(a,b); } } int main() { cin>>n>>m; for(int i=0;i<n;i++) scanf("%s",&g[i]); for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(g[i][j] == 'W') dfs(i,j),res++; cout<<res<<endl; //system("pause"); }