现在的位置: 首页 > 综合 > 正文

回溯法解决八皇后问题

2017年03月02日 ⁄ 综合 ⁄ 共 459字 ⁄ 字号 评论关闭

回溯法:全排列并进行剪枝

#include <iostream>
#include <algorithm>
using namespace std;

#define N 100000
int C[N];
int tot;
int visited[3][N];//列访问,副对角线访问,主对角线访问

//八皇后问题
void search(int n, int cur)
{
	if (cur == n)
		tot++;
	else for (int i = 0; i < n; i++)
	{
		if (!visited[0][i] && !visited[1][cur + i] && !visited[2][cur - i + n])
		{
			C[cur] = i;
			visited[0][i] = visited[1][cur + i] = visited[2][cur - i + n] = 1;
			search(n, cur + 1);
			visited[0][i] = visited[1][cur + i] = visited[2][cur - i + n] = 0;
		}
	}
}

int main()
{
	int n;
	cin >> n;
	search(n, 0);
	cout << tot << endl;
	return 0;
}

抱歉!评论已关闭.