题目描述
一个如下的 6×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。
题目限制
输入格式
一行一个正整数 n,表示棋盘是 n×n 大小的。
输出格式
前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。
输入输出样例
解题思路
本题用dfs,row数组指的是在now行row[now]列有皇后,now指的是现在要填的这个“坑”
AC代码
#include <bits/stdc++.h>
using namespace std;
int n,t=0;
int row[14]={0};
void dfs(int now);
int main(){
cin>>n;
dfs(1);
cout<<t<<endl;
return 0;
}
void dfs(int now)
{
if(now==n+1)
{
t++;
if(t<=3)
{
for(int i=1;i<=n;i++)
cout<<row[i]<<" ";
cout<<endl;
}
return;
}
for(int i=1;i<=n;i++)
{
bool ans=1;
for(int j=1;j<now;j++)
{
if(i==row[j]||now+i==j+row[j]||now-i==j-row[j])
{
ans=0;
break;
}
}
if(ans){
row[now]=i;
dfs(now+1);
}
}
return;
}