104.N皇后 (15分)
C时间限制:1 毫秒 | C内存限制:3000 Kb
题目内容:
国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的
放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问题来讲解程式设计之技巧。
该题要求N皇后的放置结果共有多少种
输入描述
输入一个正整数N(N小于16)输出描述
输出结果输入样例
8输出样例
92
#include <stdio.h> #include <string.h> int c[20];//用来记录 a[i] = j 表示第i个皇后放在了 第 j 列 int count, n; void search(int pos){ if(pos == n+1){ count++; return ; } //看放在第几列 for(int i = 1; i <= n; i++){ c[pos] = i; //把第 pos 个皇后放在了第 i 列 //看看和前面的皇后是否有冲突 bool flag = true; for(int j = 1; j < pos; j++){ if(c[pos]==c[j] || pos-j==c[pos]-c[j] || pos-j == c[j]-c[pos]){ flag = false; break; } } if(flag) search(pos+1); } } int main(){ memset(c, 0, sizeof c); count = 0; scanf("%d", &n); search(1); //从第 1 行开始放第一个皇后 printf("%d ", count); return 0; }