当时做题的时候出现了些问题但没有找到我这样思路的代码,故现在ac了发出来给那些跟我思路相同的找不到问题的人提供借鉴:
代码如下
#include<bits/stdc++.h>
using namespace std;
int n,sum=0,times=0;
void init(int **a)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
a[i][j]=0;
}
return;
}
int setnm(int **a,int x,int y)
{
for(int i=x;i<n;i++){
a[i][y]++;
}
for(int i=x,j=y;(i<n&&j<n);i++,j++)
{
a[i][j]++;
}
for(int i=x,j=y;(i<n&&j>=0);i++,j--){
a[i][j]++;
}
a[x][y]=-1;
}
int setnm2(int **a,int x,int y)
{
for(int i=x;i<n;i++){
a[i][y]--;
}
for(int i=x,j=y;(i<n&&j<n);i++,j++)
{
a[i][j]--;
}
for(int i=x,j=y;(i<n&&j>=0);i++,j--){
a[i][j]--;
}
a[x][y]=0;
}
void checker(int **a,int x,int y)
{
if(x==n-1){
sum++;
if(times<3){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i][j]==-1){
printf("%d ",j+1);
}
}
}
printf("\n");
}
times++;
return;
}
else{
int i=x+1;
for(int j=0;j<n;j++){
if(a[i][j]==0){
setnm(a,i,j);
checker(a,i,j);
setnm2(a,i,j);
}
}
}
}
int main()
{
cin>>n;
int *a[n];
for(int i=0;i<n;i++){
a[i]=new int [n];
}
for(int i=0;i<n;i++){
init(a);
setnm(a,0,i);
checker(a,0,i);
}
cout<<sum;
return 0;
}