社区讨论

蒟蒻才学dfs

P114101迷宫参与者 10已保存回复 24

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
24 条
当前快照
1 份
快照标识符
@mi7yvg6n
此快照首次捕获于
2025/11/21 05:52
4 个月前
此快照最后确认于
2025/11/21 06:52
4 个月前
查看原帖
恳请大佬指示为啥会RE
CPP
#include <bits/stdc++.h>
using namespace std;
#define maxn 1100
#define maxm 100100
int n,m,vis[maxn][maxn],cnt=0,now=0,a[maxn][maxn],ans[maxn][maxn],f[maxn];
char c[maxn];
int dx[]={0,1,-1,0,0};
int dy[]={0,0,0,-1,1};

inline int read_() {
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9') {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9') {
        x=(x<<3)+(x<<1)+c-'0';
        c=getchar();
    }
    return x*f;
}

void dfs_(int x,int y) {
	++now;
	vis[x][y]=1;
	ans[x][y]=cnt;
	for(int i=1;i<=4;++i) {
		int px=x+dx[i];
		int py=y+dy[i];
		if(px<1||py<1||px>n||py>n) continue;
		if(vis[px][py]) continue;
		if(a[px][py]^a[x][y]) dfs_(px,py);
	}
}

int main()  {
	freopen("a.txt","r",stdin);
	n=read_();m=read_();
	memset(a,0,sizeof(a));
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=n;++i) {
		scanf("%s",c);
		for(int j=0;j<n;++j) {
			if(c[j]=='1') a[i][j+1]=1;
		}
	}
	for(int i=1;i<=n;++i) {
		for(int j=1;j<=n;++j) {
			if(vis[i][j]) continue;
			++cnt;now=0;
			dfs_(i,j);
			f[cnt]=now;
		}
	} 
	int x,y;
	for(int i=1;i<=m;++i) {
		x=read_();y=read_();
		printf("%d\n",f[ans[x][y]]);
	}
	return 0;
}

回复

24 条回复,欢迎继续交流。

正在加载回复...