标签:
题解:题目描述什么的一大段废话,直接看输入输出,发现是一个经典的DFS连通块问题。
#include <cstdio> #include <iostream> #include <string> #include <sstream> #include <cstring> #include <stack> #include <queue> #include <algorithm> #include <cmath> #include <map> #define ms(a) memset(a,0,sizeof(a)) #define msp memset(mp,0,sizeof(mp)) #define msv memset(vis,0,sizeof(vis)) using namespace std; //#define LOCAL char mp[120][120]; int n,m; int ans; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; void dfs(int x,int y) { for(int i=0;i<4;i++) { int nx=x+dir[i][0],ny=y+dir[i][1]; if(nx>=0&&nx<n&&ny>=0&&ny<m) { if(mp[nx][ny]==‘#‘) { mp[nx][ny]=‘.‘; dfs(nx,ny); } } } return; } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); #endif // LOCAL //Start int N; cin>>N; while(N--) { cin>>n>>m; msp,ans=0; for(int i=0; i<n; i++)cin>>mp[i]; for(int i=0; i<n; i++) for(int j=0; j<m; j++) if(mp[i][j]==‘#‘) { mp[i][j]=‘.‘; ans++; dfs(i,j); } printf("%d\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/gpsx/p/5171175.html