1.题目链接。题目就是经典的八皇后问题,同一行同一列只能有一个皇后,并且对角线上也不能有相对的皇后。我们先用dfs解决这个问题,其实这个问题的解法有很多种。下面时代码:
#include "stdafx.h"
#include<iostream>
#pragma warning(disable:4996)
using namespace std;
int n, sum;
int x[15], y[15];
int place(int k)//k的意义就是放置第看个皇后
{
for (int i = 1; i <k; i++)
{
//这个条件十分的重要,前边表示有皇后在对角线上后边表示有皇后在同一列。至于行就不用考虑
//因为我们dfs的就是行,行一定不同
if (abs(x[k] - x[i]) == (k - i) || (x[k] == x[i]))
{
return 0;
}
}
return 1;
}
void dfs(int a)
{
if (a > n)
{
sum++;
return;
}
for (int i = 1; i <= n; i++)
{
x[a] = i;
if (place(a))//如果放置a可行
{
dfs(a + 1);//下一次dfs
}
}
}
int main()
{
//打个表,否则会t掉
for (int i = 1; i <= 10; i++)
{
sum = 0;
n = i;
dfs(1);
y[i] = sum;
}
int t;
while (~scanf("%d", &t)&&t)
{
printf("%d\n", y[t]);
}
return 0;
}