4 条题解

  • 0
    @ 2025-12-13 9:36:05

    洪水填充板子题:bfs+区域标记

    int dx[4] = { 0,0,-1,1 };
    int dy[4] = { 1,-1,0,0 };
    
    void solveA() {
    	int t = 1;
    	et(t) {
    		int n, m; cin >> n >> m;
    		vector<vector<int>>matrix(n + 1, vector<int>(n + 1));
    		for (int i = 1; i <= n; i++) {
    			string str; cin >> str;
    			for (int j = 1; j <= n; j++) {
    				matrix[i][j] = str[j - 1] + '0';
    			}
    
    		}
    
    		int cnt = 1;
    		unordered_map<int, int>hash;
    		vector<vector<int>>mask(n + 1, vector<int>(n + 1,0));
    		for (int i = 1; i <= n; i++) {
    			for (int j = 1; j <= n; j++) {
    				if (mask[i][j] == 0) {
    					queue<pair<int,int>>q;
    					int num = 1;
    					q.push({ i,j });
    					mask[i][j] = cnt;
    					
    					while (!q.empty()) {
    						int top_i = q.front().first;
    						int top_j = q.front().second;
    						q.pop();
    
    						for (int dic = 0; dic < 4; dic++) {
    							int ni = top_i + dy[dic];
    							int nj = top_j + dx[dic];
    
    							if (ni >= 1 && ni <= n && nj >= 1 && nj <= n&&mask[ni][nj]==0) {
    								if (matrix[top_i][top_j] != matrix[ni][nj]) {
    									q.push({ ni,nj });
    									mask[ni][nj] = cnt;
    									num++;
    								}
    							}
    						}
    					}
    					hash[cnt] = num;
    					cnt++;
    				}
    			}
    		}
    
    		for (int i = 0; i < m; i++) {
    			int ni, nj; cin >> ni >> nj;
    			cout << hash[mask[ni][nj]] << endl;
    		}
    	}
    }
    
    

    信息

    ID
    1095
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    93
    已通过
    8
    上传者