6 条题解

  • 1
    @ 2023-4-2 11:02:26
    #include<bits/stdc++.h>//万能头
    using namespace std;
    char mp[165][165];//水塘
    int n,m,s,v[165][165];
    int d[8][2]={1,0,0,1,-1,0,0,-1,1,-1,-1,1,-1,-1,1,1}; //8方向
    void p(int x,int y)
    {
    int i,dx,dy;
    v[x][y]=1;//已遍历过
    for(i=0;i<=7;i++)
    {
    dx=x+d[i][0];//往8个方向
    dy=y+d[i][1];//继续扩展
    if(mp[dx][dy]=='W'&&v[dx][dy]==0)//若未遍览过 且 为水坑则继续
    {
    p(dx,dy);//继续搜索
    }
    }
    }
    int main()
    {
    cin>>n>>m;//输入n,m
    s=0;//水坑数
    for(int i=1;i<=n;i++)
    {
    for(int j=1;j<=m;j++)
    {
    cin>>mp[i][j];//输入
    }
    }
    for(int i=1;i<=n;i++)//
    {
    for(int j=1;j<=m;j++)
    {
    if(mp[i][j]=='W'&&v[i][j]==0)//若未遍览过 且 为水坑则继续
    {
    p(i,j);//搜索
    s++;//搜索完毕,水塘总数+1
    }
    }
    }
    cout<<s;//输出s
    return 0; //结束
    }
    
    • 1
      @ 2022-10-15 16:38:02
      #include <iostream>
      using namespace std;
      
      int dx[8] = {-1,  -1, -1,   0,  0,   1,  1,  1};
      int dy[8] = {-1,  0,   1,  -1,  1,  -1,  0,  1};
      
      int n, m;
      char a[105][105];
      
      void dfs(int x, int y,int cnt)
      {
      	// 染色标记
      	a[x][y] = '.';
      	for (int i = 0; i < 8; i++)
      	{
      		int nx = x + dx[i];
      		int ny = y + dy[i];
      		if (nx <= n and nx >= 1 and 1 <= ny and ny <= m and a[nx][ny] == 'W'){
      			dfs(nx,ny,cnt+1);
      		}
      	}
      }
      
      int main()
      {
          cin >> n >> m;
          for (int i = 1; i <= n; i++)
          {
          	for (int j = 1; j <= m; j++)
          	{
      	    	cin >> a[i][j];
          	}
          }
          int ans = 0;
          for (int i = 1; i <= n; i++)
          {
          	for (int j = 1; j <= m; j++)
          	{
          		// 寻找连通块,记录个数
          		if (a[i][j] == 'W')
          		{
          			dfs(i,j,1);
          			ans++;
          		}
          	}
          }
          cout << ans << endl;
          return 0;
      }
      
      • 0
        @ 2024-10-13 9:34:11
        #include<bits/stdc++.h>
        #define int long long
        using namespace std;
        int n,m,ans;
        int dir[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}};
        char w[115][115];
        struct point{  int px,py;  };
        queue<point> que;
        void bfs(int tx,int ty){
        	w[tx][ty]='.';
        	que.push((point){tx,ty});
        	while(!que.empty()){
        		point p=que.front();
        		que.pop();
        		for(int i=0;i<8;i++){
        			int nx=p.px+dir[i][0];
        			int ny=p.py+dir[i][1];
        			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&w[nx][ny]=='W'){
        				w[nx][ny]='.';
        				que.push((point){nx,ny});
        			}
        		}	
        	}
        }
        signed main(){
        	cin>>n>>m;
        	for(int i=1;i<=n;i++){
        		for(int j=1;j<=m;j++){
        			cin>>w[i][j];	
        		}	
        	}
        	for(int i=1;i<=n;i++){
        		for(int j=1;j<=m;j++){
        			if(w[i][j]=='W'){
        				bfs(i,j);
        				ans++;
        			}	
        		}	
        	}
        	cout<<ans;	
        }
        
        • 0
          @ 2024-3-25 20:14:13

          这是一道大大滴难题

          经典DFS连通块问题

          直接用那个模板套进去就可以得分了

          不抄代码,人人有责

          好吧好吧,为了满足某些蒟蒻的需求,奉送代码一篇

          #include<bits/stdc++.h>
          using namespace std;
          int n,m,Lakemap[500][500];
          void dfs(int x,int y){
          	if(Lakemap[x][y]==0)return;
          	if(x<=0 || x>n || y<=0 || y>m ){
          		return ;
          	}
          	Lakemap[x][y]=0;
          	dfs(x-1,y);
          	dfs(x-1,y+1);
          	dfs(x-1,y-1);
          	dfs(x,y-1);
          	dfs(x,y+1);
          	dfs(x+1,y+1);
          	dfs(x+1,y-1);
          	dfs(x+1,y);
          } 
          int main(){
          	cin>>n>>m;
          	for(int i=1;i<=n;i++){
          		for(int j=1;j<=m;j++){
          			char ch;
          			cin>>ch;
          			if(ch=='W')Lakemap[i][j]=1;
          			else Lakemap[i][j]=0;
          		}
          	}
          	int ans=0;
          	for(int i=1;i<=n;i++){
          		for(int j=1;j<=m;j++){
          			if(Lakemap[i][j]==1){
          				dfs(i,j);
          				ans+=1;
          			}
          		}
          	}
          	cout<<ans;
          }
          
          • 0
            @ 2023-12-17 16:51:32
            col1 col2 col3
            #include<bits/stdc++.h>
            using namespace std;
            int xx[9]={0,-1,-1,-1,0,0,1,1,1};//x方向
            int xy[9]={0,-1,0,1,-1,1,-1,0,1};//y方向
            int n,m,ans;
            char a[105][105];
            void dfs(int x,int y)
            {
            int r,c;
            a[x][y]='.';
            for (int i=1;i<=8;i++)
            {
            r=x+xx[i];
            c=y+xy[i];
            if (r<1 r>n
            continue;
            a[r][c]='.';
            dfs(r,c);
            }
            int main()
            {
            scanf("%d %d\n",&n,&m);
            for (int i=1;i<=n;i++)
            {
            for (int j=1;j<=m;j++)
            cin>>a[i][j];
            }
            ans=0;
            for (int i=1;i<=n;i++)
            {
            for (int j=1;j<=m;j++)
            {
            if (a[i][j]=='W')
            {
            ans++;
            dfs(i,j);
            }
            printf("%d\n",ans);
            return 0;
            }
            • [ ]
            • 0
              @ 2022-8-5 11:40:05

              #include <bits/stdc++.h> using namespace std; char a[108][108]; bool a1[108][108]; int n,m,sum=0; void DFS(int i,int j) { if(a1[i][j]true) { a1[i][j]=false; DFS(i+1,j+1); DFS(i-1,j-1); DFS(i-1,j+1); DFS(i+1,j-1); DFS(i,j+1);
              DFS(i,j-1); DFS(i-1,j); DFS(i+1,j); } else return; } int main() { cin>>n>>m; memset(a1,false,sizeof(a1)); for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { cin>>a[i][j]; if(a[i][j]
              'W') a1[i][j]=true; } } for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { if(a1[i][j]==true) { DFS(i,j); sum++; } } } cout<<sum<<endl;

              return 0;
              

              }

              • 1

              信息

              ID
              2617
              时间
              1000ms
              内存
              256MiB
              难度
              4
              标签
              递交数
              52
              已通过
              25
              上传者