最后一个超时间了,求优化
查看原帖
最后一个超时间了,求优化
423631
yumious_yu楼主2020/12/17 21:05

最后一个显示超过了时间,但是我怎么也优化不了,求大佬帮帮我

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<vector>
#include<math.h>
using namespace std;

int n, num = 0;
vector<int> seat;//储存已经放置了八皇后的位置
void dfs(int row) {
	if (row >= n) return;
	if (seat.size() < row) return;
	for (int i = 0; i < n; i++)
	{
		int r = 0; bool isok = 1;
		if (seat.size() == 0) {
			seat.push_back(i);
			dfs(row + 1);
			seat.pop_back();
			continue;
		}
		else
			for (auto x : seat)
			{
				if (i == x || abs(x - i) == abs(r - row)) {
					isok = 0;
					break;
				}
				r++;
			}
		if (isok) {
			seat.push_back(i);
			if (seat.size() >= n) {
				num++;
				//打印
				if (num <= 3) {
					for (int j = 0; j < seat.size(); j++)
					{
						cout << seat[j] + 1;
						if (j != n - 1) cout << " ";
					}
					cout << endl;
				}
				seat.pop_back();
				return;
			}
			else {
				dfs(row + 1);
				seat.pop_back();
			}
		}

	}
}
int main()
{
	cin >> n;
	dfs(0);
	cout << num << endl ;
	return 0;
}
2020/12/17 21:05
加载中...