社区讨论
球球球球调,悬5关
P6757[BalticOI 2013] Tracks in the Snow参与者 3已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @m27f1qa5
- 此快照首次捕获于
- 2024/10/13 18:01 去年
- 此快照最后确认于
- 2025/11/04 17:16 4 个月前
C
#include <bits/stdc++.h>
using namespace std;
char mp[5005][5005];
bool vis[5005][5005];
char awa;
int n,m;
struct node{
int x,y;
};
queue<node> q;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
bool inmp(int x,int y){
return x>=1 && x<=n && y>=1 && y<=m && vis[x][y]==false && mp[x][y]!='.' && mp[x][y]==awa;
}
void bfs(int x,int y){
q.push({x,y});
vis[x][y]=true;
while(!q.empty()){
node t=q.front();
q.pop();
char cx=t.x;
char cy=t.y;
for(int i=0;i<4;i++){
int xx=cx+dx[i];
int yy=cy+dy[i];
if(inmp(xx,yy)==true){
q.push({xx,yy});
vis[xx][yy]=true;
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
cin >> mp[i][j];
}
}
int sum = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
if (!vis[i][j] && mp[i][j] != '.') {
awa=mp[i][j];
sum++;
bfs(i, j);
}
}
}
cout << sum << endl;
return 0;
}
或者这个
C#include <iostream>
using namespace std;
char mp[4005][4005];
bool vis[4005][4005];
int n,m;
char awa;
void dfs(int x, int y) {
if (x < 0 || x >= n || y < 0 || y >= m || vis[x][y] || mp[x][y]=='.' || mp[x][y] != awa) {
return;
}
vis[x][y] = true;
dfs(x + 1, y); // 下
dfs(x - 1, y); // 上
dfs(x, y + 1); // 右
dfs(x, y - 1); // 左
return ;
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> mp[i][j];
}
}
int sum = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (!vis[i][j] && mp[i][j] != '.') {
awa = mp[i][j];
sum++;
dfs(i, j);
}
}
}
cout << sum << endl;
return 0;
}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...