比赛 4043级2023省选模拟赛3 评测结果 AWWTTTTTTT
题目名称 矩阵游戏 最终得分 10
用户昵称 zxhhh 运行时间 7.589 s
代码语言 C++ 内存使用 4.72 MiB
提交时间 2023-03-24 20:19:08
显示代码纯文本
#include <bits/stdc++.h>

using namespace std;

const int N = 205;
int a[N][N], h[N], l[N], n, flag, c;
int MAXN;

void dfs (int op, int idx) {
	c++;
	if (c > MAXN) return;
	if (idx > n) {
		if (!op && !flag) dfs(1, 2);
		else {
			flag = 1;
			for (int i = 1;i <= n;i++) if (!a[h[i]][l[i]]) flag = 0;
		}
		return;
	}
	if (op) {
		dfs(op, idx+1);
		if (flag) return;
		swap(h[1], h[idx]);
		dfs(op, idx+1);
		if (flag) return;
		swap(h[1], h[idx]);
	}
	else {
		dfs(op, idx+1);
		if (flag) return;
		swap(l[1], l[idx]);
		dfs(op, idx+1);
		if (flag) return;
		swap(h[1], h[idx]);
	}
}

int main () {
	freopen("qmatrix.in", "r", stdin);
	freopen("qmatrix.out", "w", stdout);
	int T;
	scanf("%d", &T);
	MAXN = 20000000.0 / T;
	while (T--) {
		srand(time(NULL));
		flag = c = 0;
		scanf("%d", &n);
		for (int i = 1;i <= n;i++) h[i] = l[i] = i;
		random_shuffle(h+1, h+1+n); random_shuffle(l+1, l+1+n);
		for (int i = 1;i <= n;i++) for (int j = 1;j <= n;j++) scanf("%d", &a[i][j]);
		dfs(0, 2);
		if (flag) printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}