1 条题解

  • 0
    @ 2024-12-4 16:51:28

    队列广度优先:

    #include <bits/stdc++.h>
    using namespace std;
    struct node{
    	int x;
    	int y;
    };
    int n,m;
    int dxy[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    vector<vector<int>> grid;
    void bfs(int x,int y){
    	queue<node> q;
    	grid[x][y] =0;
    	q.push({x,y});
    	while(!q.empty()){
    		node a=q.front();
    		q.pop();
    		for(int i=0;i<4;i++){
    			int xx=a.x+dxy[i][0];
    			int yy=a.y+dxy[i][1];
    			if(xx>=0&&xx<n&&yy>=0&&yy<m && grid[xx][yy]==1){
    				grid[xx][yy]=0;;
    				q.push({xx,yy});
    			}
    		}
    	}
    }
    int main(){
        int cnt=0;
    	cin>>n>>m;
    	grid.resize(n,vector<int>(m,0));
    	for(int i=0;i<n;i++){
    		for(int j=0;j<m;j++){
    			cin>>grid[i][j];
    		}
    	}  
        for(int i=0;i<n;i++){
    		for(int j=0;j<m;j++){
    		   if(grid[i][j]==1){
    		   	   cnt++;
    		   	   bfs(i,j);		   	  
    		   }
    		}
    	}  
    	cout<<cnt;
    	return 0;
    }
    
    
    • 1

    信息

    ID
    813
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    45
    已通过
    7
    上传者