sub1MLE求调
  • 板块P1141 01迷宫
  • 楼主lw393
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/6/24 22:01
  • 上次更新2024/8/16 13:23:37
查看原帖
sub1MLE求调
1033990
lw393楼主2024/6/24 22:01
#include<iostream>
using namespace std;
const int N = 1e4 + 5;

int n, g[N][N], d[N][N], vis[N][N], dir[4][2]{{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
int cnt = 0;

void dfs(int x, int y){
	d[x][y] = ++cnt;
	for(int i = 0; i < 4; i++){
		int nx = x + dir[i][0];
		int ny = y + dir[i][1];
		if(nx > 0 && nx <= n && ny > 0 && ny <= n && vis[nx][ny] == 0 && g[x][y] ^ g[nx][ny] == 1){
			vis[nx][ny] = 1;
			dfs(nx, ny);
		}
	}
}
void sfd(int x, int y){
	d[x][y] = cnt;
	for(int i = 0; i < 4; i++){
		int nx = x + dir[i][0];
		int ny = y + dir[i][1];
		if(nx > 0 && nx <= n && ny > 0 && ny <= n && vis[nx][ny] == 1 && g[x][y] ^ g[nx][ny] == 1){
			vis[nx][ny] = 2;
			sfd(nx, ny);
		}
	}
}

int main(){
	int m;
	cin >> n >> m;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			char c;
			cin >> c;
			g[i][j] = c - '0';
		}
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			cnt = 0;
			if(!vis[i][j]){
				vis[i][j] = 1;
				dfs(i, j);
				vis[i][j] = 2;
				sfd(i, j);
			}
		}
	}
	for(int i = 0; i < m; i++){
		int x, y;
		cin >> x >> y;
		cout << d[x][y] << '\n';
	}

	return 0;
}

评测记录https://www.luogu.com.cn/record/163025292

2024/6/24 22:01
加载中...