【题目来源】
求细胞数量 - 洛谷
【题目】
【算法】
深度优先搜索(DFS)
【代码】
#include<cstdio> #include<string> #include<iostream> using namespace std; const int dx[]={0,0,1,-1}; const int dy[]={1,-1,0,0}; const int N=100+1; const int M=100+1; int n,m,cnt; string s[N]; void dfs(int x,int y){ s[x][y]='0';//涂抹调,防止后续再访问导致死循环 for(int i=0;i<4;i++){ int xx=x+dx[i]; int yy=y+dy[i]; if(xx>=0 && xx<n && yy>=0 && yy<m && s[xx][yy]!='0'){ dfs(xx,yy); } } return; } void solve(){ for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(s[i][j]!='0'){ cnt++; dfs(i,j); } } } printf("%d",cnt); return; } int main(){ scanf("%d%d",&n,&m); for(int i=0;i<n;i++){ cin>>s[i]; } solve(); return 0; }
【提交情况】