社区讨论

球球球球调,悬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 条回复,欢迎继续交流。

正在加载回复...