5 solutions

  • 2
    @ 2024-3-20 13:39:19

    这不是在图里面的题吗

    #include<bits/stdc++.h>
    using namespace std;
    string arr[110];
    int n,m,ans=0;
    int xx[5]={1,0,-1,0},yy[5]={0,1,0,-1};
    void dfs(int x,int y){
        arr[x][y]='0';
        for(int i=0;i<4;i++){
            if(x+xx[i]>=0 && x+xx[i]<n && y+yy[i]>=0 && y+yy[i]<m && arr[x+xx[i]][y+yy[i]]!='0') 
    			dfs(x+xx[i],y+yy[i]);
        }
    }
    int main(){
        cin>>n>>m;
        for(int i=0;i<n;i++)
            cin>>arr[i];
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(arr[i][j]!='0'){
                    ans++;
                    dfs(i,j);
                }
            }
        }
        cout<<ans;
        return 0;
    }
    
    • 1
      @ 2025-2-21 19:04:26

      超短代码

      #include<bits/stdc++.h>
      using namespace std;
      string pp[105];
      int n,m,sum=0,xx[5]={1,0,-1,0},yy[5]={0,1,0,-1};
      void dfs(int x,int y){
          pp[x][y]='0';
          for(int i=0;i<4;i++)if(x+xx[i]>=0&&x+xx[i]<n&&y+yy[i]>=0&&y+yy[i]<m&&pp[x+xx[i]][y+yy[i]]!='0')dfs(x+xx[i],y+yy[i]);
      }
      int main(){
          cin>>n>>m;
          for(int i=0;i<n;i++)cin>>pp[i];
          for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(pp[i][j]!='0'){
      		sum++;
      		dfs(i,j);
          }cout<<sum;
      }
      
      • @ 2025-2-21 19:05:35

        有点线性(doge)

      • @ 2025-2-21 20:31:58

        ##神经疯癫版

        #include<bits/stdc++.h>
        using namespace std;string pp[105];int n,m,sum=0,xx[5]={1,0,-1,0},yy[5]={0,1,0,-1};void dfs(int x,int y){pp[x][y]='0';for(int i=0;i<4;i++)if(x+xx[i]>=0&&x+xx[i]<n&&y+yy[i]>=0&&y+yy[i]<m&&pp[x+xx[i]][y+yy[i]]!='0')dfs(x+xx[i],y+yy[i]);}int main(){cin>>n>>m;for(int i=0;i<n;i++)cin>>pp[i];for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(pp[i][j]!='0'){sum++;dfs(i,j);}cout<<sum;}
        
    • 0
      @ 2025-1-18 8:36:40
      #include<bits/stdc++.h>
      
      using namespace std;
      char c[1001][1001];
      struct node{
      	int wx,wy;
      };
      const int dx[4]={0,0,-1,1};
      const int dy[4]={1,-1,0,0};
      int n,m;
      void bfs(int x,int y){
      	c[x][y]='0';
      	queue<pair<int,int> > q;
      	q.push({x,y});
      	while(!q.empty()){
      		int sx=q.front().first;
      		int sy=q.front().second;
      		q.pop();
      		for(int i=0;i<4;i++){
      			int nx=sx+dx[i];
      			int ny=sy+dy[i];
      			if(nx<1||ny<1||nx>n||ny>m||c[nx][ny]=='0')continue;
      			c[nx][ny]='0';
      			q.push({nx,ny});	
      		} 
      	}
      }
      int main(){
      	//小小BFS,不轻松拿下
      	cin>>n>>m;
      	for(int i=1;i<=n;i++){
      		for(int j=1;j<=m;j++){
      			cin>>c[i][j];
      		}
      	}
      	int cnt=0;
      	for(int i=1;i<=n;i++){
      		for(int j=1;j<=m;j++){
      			if(c[i][j]!='0'){
      				bfs(i,j);
      				cnt++;
      			}
      		}
      	}
      	cout<<cnt;
      	return 0;
      }
      
      • 0
        @ 2024-1-26 9:36:43
        #include<bits/stdc++.h>
        using namespace std;
        int a1,a2;
        char a[105][105];
        int sum=0;
        void dfs(int x,int y){
        	if(x<1||x>a1||y<1||y>a2||a[x][y]=='0') return;
        	a[x][y]='0';
        	dfs(x+1,y);
        	dfs(x,y+1);
        	dfs(x-1,y);
        	dfs(x,y-1);
        }
        int main(){
        	cin>>a1>>a2;
        	for(int i=1;i<=a1;i++) for(int j=1;j<=a2;j++) cin>>a[i][j];
        	for(int i=1;i<=a1;i++) for(int j=1;j<=a2;j++) if(a[i][j]!='0'){
        		sum++;
        		dfs(i,j);
        	}
        	cout<<sum<<"\n";
        	return 0;
        }
        

        AC代码奉上

      • 0
        @ 2023-12-30 11:13:37
        注意:题目的输入没有空格 👀️ !!!
        
        #include<iostream>
        #include<string>
        using namespace std;
        //用一个数组来存储相对位置
        int x[4]={-1,1,0,0};
        int y[4]={0,0,-1,1};
        int a[1000][1000],us[1000][1000],n,m,ans=0;//初始化
        void dfs(int q,int w)//用于标记细胞是否探索过
        {
         us[q][w]=1;//去过就打标记
         for(int i=0;i<4;i++)
         {
          //超长的判断(包括是否越位)
          if(q+x[i]>=0 && q+x[i]<n && w+y[i]>=0 && w+y[i]<m && us[q+x[i]][w+y[i]]==0 &&  a[q+x[i]][w+y[i]]!=0)
          {
           dfs(q+x[i],w+y[i]);//只有满足条件才能继续搜索,标记
          }
         }
        }
        int main()
        {
         string s;
         cin>>n>>m;//输入
         for(int i=0;i<n;i++)
         {
          cin>>s;//可恶的字符串
          for(int j=0;j<m;j++)
          {
           us[i][j]=0;//初始化
           a[i][j]=s[j]-48;//可恶的字符串
          }
         }
         for(int i=0;i<n;i++)
         {
          for(int j=0;j<m;j++)
          {
           if(us[i][j]==0 && a[i][j]!=0)//当是一个细胞时且没标记过
           {
            ans++;//增加
            dfs(i,j);//标记整个细胞
           }
          }
         }
         cout<<ans;//输出
         return 0;//完结散花
        }
        
        • 1

        Information

        ID
        814
        Time
        1000ms
        Memory
        256MiB
        Difficulty
        6
        Tags
        # Submissions
        154
        Accepted
        49
        Uploaded By