4 条题解
-
0
洪水填充板子题: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
- 上传者