N皇后问题(回溯法)

来源:互联网 发布:淘宝c2c 收费模式 编辑:程序博客网 时间:2024/05/21 00:47
#include <iostream>#include <cstdio>using namespace std;#define MAXN 10int n;//皇后数,棋盘大小int q[MAXN];//放置的皇后的位置,q[i]表示:第i个皇后的位置在第i行,第q[i]列int count;//可行方案数bool IsPlaceable(int x, int y){int i;for (i = 1; i < x; i++){if (abs(i-x) == abs(q[i]-y) || q[i] == y){return false;}}return true;}void Backtrack(int k){if (k > n){count++;/*printf("方法%d:\n", count);int i;for (i = 1; i <= n; i++){printf("%d: %d %d\n", i, i, q[i]);}*/}else{int i;for (i = 1; i <= n; i++){if (IsPlaceable(k, i)){q[k] = i;Backtrack(k+1);}}}}int main(void){while (scanf("%d", &n) != EOF){count = 0;Backtrack(1);printf("%d\n", count);}return 0;}

原创粉丝点击