为什么一半红,一半黑???
查看原帖
为什么一半红,一半黑???
565707
mediocre_楼主2022/11/27 07:44
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
const int house_x[8] = {-1, -2, -2, -1, 1, 2, 2, 1};
const int house_y[8] = {-2, -1, 1, 2, 2, 1, -1, -2};
int n, m, x, y, a[N][N];
int ans = 1e5;
bool house[N];
int read() {
	int s = 0, f = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9') {
		if (ch == '-')f = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9') {
		s = (s << 1 + s << 3) + ch - '0';
		ch = getchar();
	}
	return s * f;
}
void write(int x) {
	if (x > 9) write(x / 10);
	putchar(x % 10 + '0');
}
void dfs(register int sx, register int sy, register int dx, register int dy, register int flag) {
	if (sx < 1 || sy < 1 || sx > n || sy > n)return;
	if (sx == dx && sy == dy) {
		if (ans > flag)
			ans = flag;
		return;
	}
	for (register int i = 0; i <= 7; ++i)
		if (!house[i]) {
			house[i] = true;
			dfs(sx + house_x[i], sy + house_y[i], dx, dy, flag + 1);
			house[i] = false;
		}
}
int main() {
	n = read();m = read();x = read();y = read();
	for (register int i = 1; i <= n; ++i) {
		for (register int j = 1; j <= m; ++j) {
			for (register int k = 0; k <= 7; ++k)
				house[i] = false;
			dfs(x, y, i, j, 0);
			if (ans >= 100000)printf("-1");
			else write(ans);
			putchar(' ');
			ans = 1e5;
		}
		putchar('\n');
	}
	return 0;
}
2022/11/27 07:44
加载中...