这道题原先在博客上看到了八皇后然后自己就做了学校OJ上的n皇后,用到的思想很不错,故记录于此。。
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int a[20][20]={0};//定义一个模板
int hang[20];//查询到了哪一行
int key=0;//为了多组输入
int ko=0;
bool test_judge(int ui)//判断是否合格
{
for(int i=1;i<ui;i++)
{
if(hang[i]==hang[ui]||abs(hang[i]-hang[ui])==ui-i)
return 0;
}
return 1;
}
void test_dfs(int num)//dfs每次递归运用
{
if (num>=key+1)
{
ko++;
}
for(int i=1;i<=key;i++)
{
hang[num]=i;
if(a[num][i]!=1&&test_judge(num))
{
a[num][i]=1;
test_dfs(num+1);
a[num][i]=0;
}
}
}
int main()//主函数
{
int m;
while(scanf("%d",&m)!=EOF)//多组输入
{
ko=0;
a[20][20]={0};//每次将
//cin>>m;
key=m;
test_dfs(1);
cout<<ko<<endl;
}
return 0;
}
原文:https://www.cnblogs.com/Mikasa233/p/10827796.html