64分!大佬求调!玄关!
  • 板块P1162 填涂颜色
  • 楼主Urbosa
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/13 09:55
  • 上次更新2025/1/13 15:21:39
查看原帖
64分!大佬求调!玄关!
1094739
Urbosa楼主2025/1/13 09:55
/*********************************************************************
    程序名: vatti
    版权: vatti
    作者: vatti
    日期: 2025-01-13 08:10
    说明: vatti
*********************************************************************/
#include <bits/stdc++.h>
using namespace std;
const int N = 205;
int bod[N][N];
int n;

void dfs(int x, int y, int oldnum, int newnum) {
	if (x < 1 || x > n || y < 1 || y > n || bod[x][y] != oldnum)
		return;
	bod[x][y] = newnum;
	dfs(x - 1, y, oldnum, newnum);
	dfs(x + 1, y, oldnum, newnum);
	dfs(x, y - 1, oldnum, newnum);
	dfs(x, y + 1, oldnum, newnum);
}

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			cin >> bod[i][j];
		}
	}
	for (int i = 1; i <= n; i++) {
		if (bod[i][1] == 0)
			dfs(i, 1, 0, 3);
		if (bod[n][i] == 0)
			dfs(i, n, 0, 3);
	}
	for (int j = 1; j <= n; j++) {
		if (bod[1][j] == 0)
			dfs(1, j, 0, 3);
		if (bod[n][j] == 0)
			dfs(n, j, 0, 3);
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (bod[i][j] == 0) {
				dfs(i, j, 0, 2);
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		if (bod[i][1] == 3) {
			dfs(i, 1, 3, 0);
		}
		if (bod[i][n] == 3) {
			dfs(i, n, 3, 0);
		}
	}
	for (int j = 1; j <= n; j++) {
		if (bod[1][j] == 3) {
			dfs(1, j, 3, 0);
		}
		if (bod[n][j] == 3) {
			dfs(n, j, 3, 0);
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			cout << bod[i][j] << " ";
		}
		puts("");
	}
	return 0;
}
2025/1/13 09:55
加载中...