2 条题解

  • 1
    @ 2025-10-19 9:28:10

    #include<bits/stdc++.h> #define ll long long #define un unsigned #define db double #define st string #define ct const #define xh(a,b,c) for(int a=b;a<=c;a++) #define wx while(1) #define dn(a,b,c) for(int a=b;a>=c;a--) using namespace std; ll n,m; char a[110][110]; int tx[]={0,0,-1,1}; int ty[]={1,-1,0,0}; bool f[110][110]; int ans,maxn=INT_MIN; void dfs(int x,int y){ a[x][y]='0'; xh(i,0,3){ int X=x+tx[i],Y=y+ty[i]; if(a[X][Y]'1')dfs(X,Y); } } signed main(){ cin>>n>>m; xh(i,1,n)xh(j,1,m){ char x; cin>>x; if(x>'0')a[i][j]='1'; } xh(i,1,n)xh(j,1,m)if(a[i][j]'1'){ ans++; dfs(i,j); } cout<<ans; return 0; }

    • -6
      @ 2022-5-21 20:36:31

      用深搜解题,dfs(i,j)把第i行第j列给深搜(递归)下去,4个方向都去搜一遍,最终得出答案。 #include<bits/stdc++.h> using namespace std; const int dx[4]={-1,0,1,0}; const int dy[4]={0,-1,0,1}; int n,m; string c[1005]; bool f[1005][1005]; void dfs(int x,int y) { f[x][y]=1; for(int i=0;i<=3;i++) { int x1=x+dx[i],y1=y+dy[i]; if(x1>n||x1<1||y1>m||y1<1)continue; if((!f[x1][y1])&&(c[x1][y1]!='0'))dfs(x1,y1); } return ; } signed main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>c[i]; c[i]=' '+c[i]; } int ans=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if((!f[i][j])&&(c[i][j])!='0') { ans++; dfs(i,j); } cout<<ans; return 0; }

      • 1

      信息

      ID
      75
      时间
      1000ms
      内存
      256MiB
      难度
      3
      标签
      递交数
      219
      已通过
      126
      上传者