[N皇后]求救`(*>﹏<*)′WA两个
查看原帖
[N皇后]求救`(*>﹏<*)′WA两个
737273
digua2010楼主2024/2/24 20:18
#include <bits/stdc++.h>
using namespace std;

// 意如其名,f是棋盘,shu是竖,接下来是右边的斜,左边的斜,t判断是否输出三组数据 
bool f[15][15], shu[15], r_xie[20], l_xie[20], t = 0;
long long n, sum;

// 输出函数 
void print() {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (f[i][j]) cout << j + 1 << ' ';
		}
	}
	cout << "\n";
}

void dfs(int x) {
	// 如果到指定行就输出 
	if (x > n) {
		// 判断是否输出三组(要一直计数最后输出) 
		sum ++;
		if (sum > 3) {
			t = 1;
			return;
		}
		print();
		return ;
	}
	// 遍历每一列 
	for (int i = 0; i < n; i++) {
		// 如果列、左斜、右斜都没有皇后进入下一个递归 
		if (!shu[i] && !r_xie[x - i] && !l_xie[x + i]) {
			// 标记 
			shu[i] = 1;
			r_xie[x - i] = 1;
			l_xie[x + i] = 1;
			f[x - 1][i] = 1;
			dfs(x + 1);
			// 解除标记 
			f[x - 1][i] = 0;
			shu[i] = 0;
			r_xie[x - i] = 0;
			l_xie[x + i] = 0;
		}
	}
}

int main() {
	cin >> n;
	// 给出初始行 
	dfs(1);
	cout << sum;
	
	return 0;
}

请大佬帮忙指一下错!谢谢!

2024/2/24 20:18
加载中...