您的位置:首页 > 其它

回溯法解决八皇后问题

2015-01-04 21:44 288 查看
回溯法:全排列并进行剪枝

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

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

//八皇后问题
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: