题目链接:请戳这里。 题目大意及思路:读懂题意就好了,就是DFS找联通块。
没什么好说的,见代码吧。
#include<cstdio> #include<cstring> #include<algorithm> #define N 100+5 using namespace std; int n,m; char g[N][N]; int dir[4][2]={1,0,0,1,-1,0,0,-1}; 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 && g[nx][ny]=='#') { g[nx][ny]='.'; //这里就将‘#’改成‘.’,表示已经访问。 dfs(nx,ny); } } } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%s",&g[i]); int ans=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(g[i][j]=='#') { g[i][j]='.'; dfs(i,j); //每一遍dfs后,ans就++。 ans++; } } } printf("%d\n",ans); } return 0; }
时间: 2024-10-05 23:14:08