HDU 2952(Counting Sheep )
题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=2952
/*简单DFS
Date: 2012/10/11
题意和上题差不多,就是求连通分量的个数
*/
#include<iostream> using namespace std; #define maxn 101 char matrix[maxn][maxn]; int n,m,t,ans; bool visited[maxn][maxn]; int dir[][2] = {{0,-1},{1,0},{0,1},{-1,0}}; bool ok(int i,int j) { return i >= 1 && i <= n && j >= 1 && j <= m && matrix[i][j] == '#'; } void dfs(int x,int y) { int p,q; for(int i = 0; i < 4; i++) { p = x + dir[i][0],q = y + dir[i][1]; if(ok(p,q) && !visited[p][q]) visited[p][q] = true,dfs(p,q); } } void solve() { int i,j; ans = 0; memset(visited,false,sizeof(visited)); for(i = 1; i <= n; i++) for(j = 1; j <= m; j++) if(!visited[i][j] && matrix[i][j] == '#') ans++,visited[i][j] = true,dfs(i,j); printf("%d\n",ans); } int main() { //freopen("1005.txt","r",stdin); scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); int i,j; for(i = 1; i <= n; i++) for(j = 1; j <= m; j++) cin >> matrix[i][j]; solve(); } return 0; }

浙公网安备 33010602011771号