6 solutions

  • 6
    @ 2024-7-8 16:24:35
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1010;
    char g[N][N];
    int dx[]={-1,-1,-1,0,0,1,1,1};
    int dy[]={-1,0,1,-1,1,-1,0,1};
    bool st[N][N];
    int n,m;
    struct Node{
       int x,y;
    };
    void bfs(int x,int y)
    {
       queue<Node> q;
       q.push({x,y});
       st[x][y]=1;
       while(q.size())
       {
          Node t=q.front();
          q.pop();
          int x=t.x,y=t.y;
          for(int i=0;i<8;i++)
          {
             int a=x+dx[i],b=y+dy[i];
             if(a<0||a>=n||b<0||b>=m)
             {
                continue;
             }
             if(g[a][b]=='.')
             {
                continue;
             }
             if(st[a][b]) 
    			{
    				continue;
    			}
             st[a][b]=1;
             q.push({a,b});
          }
       }
    }
    int main()
    {
       cin>>n>>m;
       for(int i=0;i<n;i++)
       {
          cin>>g[i];
       }
       int res=0;
       for(int i=0;i<n;i++)
       {
          for(int j=0;j<m;j++)
          {
             if(g[i][j]=='W'&&!st[i][j])
             {
                bfs(i,j);
                res++;
             }
          }
       }
       cout<<res;
       return 0;
    }
    
  • 2
    @ 2024-7-8 16:03:34
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1010;
    char g[N][N];
    int dx[]={-1,-1,-1,0,0,1,1,1};
    int dy[]={-1,0,1,-1,1,-1,0,1};
    bool st[N][N];
    int n,m;
    struct Node
    {
    	int x,y;
    };
    void bfs(int x,int y)
    {
    	queue<Node> q;
    	q.push({x,y});
    	st[x][y]=1;
    	while(q.size())
    	{
    		Node t=q.front();
    		q.pop();
    		int x=t.x,y=t.y;
    		for(int i=0;i<8;i++)
    		{
    			int a=x+dx[i],b=y+dy[i];
    			if(a<0 || a>=n || b<0 || b>=m)
    			{
    				continue;
    			}
    			if(g[a][b]=='.')
    			{
    				continue;
    			}
    			if(st[a][b]) 
    			{
    				continue;
    			}
    			st[a][b]=1;
    			q.push({a,b});
    		}
    	}
    }
    int main()
    {
    	cin>>n>>m;
    	for(int i=0;i<n;i++)
    	{
    		cin>>g[i];
    	} 
    	int res=0;
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<m;j++)
    		{
    			if(g[i][j]=='W' && !st[i][j]) 
    			{
    				bfs(i,j);
    				res++;
    			}
    		}
    	}
    	cout<<res;
    	return 0;
    }
    
    • 1
      @ 2025-3-29 19:18:13
      #include<bits/stdc++.h>
      using namespace std;
      const int N=120;
      int dx[]={-1,0,1,-1,1,-1,0,1};
      int dy[]={-1,-1,-1,0,0,1,1,1};
      char g[N][N];
      int n,m;
      bool cnt[N][N];
      struct node{int x,y;};
      void bfs(int x,int y)
      {
      	cnt[x][y]=1;
      	queue<node>q;
      	q.push({x,y});
      	while(q.size())
      	{
      		node t=q.front();
      		q.pop();
      		for(int i=0;i<8;i++)
      		{
      			int a=t.x+dx[i],b=t.y+dy[i];
      			if(g[a][b]=='.')
      			{
      				continue;
      			}
      			if(a<1||a>n||b<1||b>m)
      			{
      				continue;
      			}
      			if(cnt[a][b])
      			{
      				continue;
      			}
      			q.push({a,b});
      			cnt[a][b]=1;
      		}
      	}
      }
      int main(){
      	cin>>n>>m;
      	for(int i=1;i<=n;i++)
      	{
      		for(int j=1;j<=m;j++)
      		{
      			cin>>g[i][j];
      		}
      	}
      	int res=0;
      	for(int i=1;i<=n;i++)
      	{
      		for(int j=1;j<=m;j++)
      		{
      			if(g[i][j]=='W'&&!cnt[i][j])
      			{
      				bfs(i,j);
      				res++;
      			}
      		}
      	}
      	cout<<res;
      	return 0;
      }
      
      
      • -1
        @ 2025-12-22 17:45:14
        #include<bits/stdc++.h>
        using namespace std;
        const int N=120;
        char g[N][N];
        int n,m;
        int dx[]={-1,-1,-1,0,0,1,1,1};
        int dy[]={-1,0,1,-1,1,-1,0,1};
        bool st[N][N];
        typedef pair<int,int> PII;
        #define x first
        #define y second
        void bfs(int x,int y)
        {
        	st[x][y]=1;
        	queue<PII> q;
        	q.push({x,y});
        	while(q.size())
        	{
        		PII t=q.front();
        		q.pop();
        		for(int i=0;i<8;i++)
        		{
        			int a=t.x+dx[i],b=t.y+dy[i];
        			if(st[a][b]) continue;
        			if(g[a][b]=='.') continue;
        			if(a<1||a>n||b<1||b>m) continue;
        			q.push({a,b});
        			st[a][b]=1;
        		}
        	}
        }
        int main()
        {
        	cin>>n>>m;
        	for(int i=1;i<=n;i++)
        	{
        		for(int j=1;j<=m;j++)
        		{
        			cin>>g[i][j];
        		}
        	}
        	int cnt=0;
        	for(int i=1;i<=n;i++)
        	{
        		for(int j=1;j<=m;j++)
        		{
        			if(g[i][j]=='W'&&st[i][j]==0)
        			{
        				bfs(i,j); //使用函数进行遍历
        				cnt++;
        			}
        		}
        	}
        	cout<<cnt;
        	return 0;
        }
        
        
        • -3
          @ 2024-11-30 10:11:09

          我讨厌吃糖技术!!

          • -5
            @ 2024-7-8 15:48:47
            #include<bits/stdc++.h>
            using namespace std;
            const int N=1010;
            char g[N][N];
            vector<int> dx[N]={0,-1,1,0,1,0,-1,1};
            vector<int> dy[N]={0,-1,1,-1,-1,0,0,1};
            int n,m,st[N][N];
            struct Node{
            	int x,y;
            };
            bool bfs(int x,int y,int q[N])
            {
            	q.push({x,-1});
            	q.push({y,-1});
            	st[0][0]=0;
            	while(--q.size())
            	{
            		Node t=q.size();
            		int f=q.top();
            		int x=f.x,y=f.y;
            		for(int i=1;i<=q.x;i++)
            		{
            			int a=x+q[i],b=y+q[i];
            			if(x<0||a>=n||b<0||b>=m) break;
            			if(st[a][b]=='M') break;
            			if(q[a][b]) break;
            			q[0][1]=1;
            			q.push({-1,x});
            			q.push({-1,y});
            		}
            	}
            }
            int main()
            {
            	cin>>n>>m;
            	for(int i=1;i<=n;i++) cin>>g[i];
            	int res;
            	for(int i=0;i<n>>1;i++)
            	{
            		for(int j=i;j<m/i;j++)
            		{
            			if(st[i][j]=='W'&&q[i][j])
            			{
            				bfs(q,res);
            				res--;
            			}
            		}
            		res++;
            	}
            	cout<<res;
            	return 0;
            }
            
            
            • 1

            Information

            ID
            207
            Time
            1000ms
            Memory
            256MiB
            Difficulty
            3
            Tags
            # Submissions
            113
            Accepted
            25
            Uploaded By