最后一个超时,求助大佬
查看原帖
最后一个超时,求助大佬
1265947
honey8848楼主2025/1/17 12:39
#include<iostream>
#include<vector>
using namespace std;
int dx[8] = { -1,-1,-1,0,0,1,1,1 };
int dy[8] = { -1,0,1,-1,1,-1,0,1 };
int tot = 0;
void put_queen(int x, int y, int n, vector<vector<int>>& attack)
{
	for (int i = 1; i < n; i++)
		for (int j = 0; j < 8; j++)
			if (x + i * dx[j] <= n - 1 && x + i * dx[j] >= 0 && y + i * dy[j] <= n - 1 && y + i * dy[j] >= 0)
				attack[x + i * dx[j]][y + i * dy[j]] = 1;
}
void backtrack(int k, int n, vector<vector<int>>& attack, vector<int>& queen)
{
	if (k == n)
	{
		tot++;
		if (tot <= 3)
			for (int i = 0; i < n; i++)
			{
				cout << queen[i] + 1 << " ";
				if (i == n - 1)cout << endl;
			}
		return;
	}
	for (int i = 0; i < n; i++)
	{
		if (attack[k][i] == 0)
		{
			vector<vector<int>>temp = attack;
			queen[k] = i;
			attack[k][i] = 1;
			put_queen(k, i, n, attack);
			backtrack(k + 1, n, attack, queen);
			attack = temp;
			queen[k] = -1;
		}
	}
}
int main()
{
	int n;
	cin >> n;
	vector<vector<int>>attack(n, vector<int>(n));
	vector<int>queen(n, -1);
	backtrack(0, n, attack, queen);
	cout << tot;
}
2025/1/17 12:39
加载中...