深搜,返回3221225620,求调,会关注
查看原帖
深搜,返回3221225620,求调,会关注
974277
水星湖psgqwq楼主2023/8/25 16:55
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int n,p[15],cnt,b[15];
double xie(int x1,int y1,int x2,int y2)//斜率 
{
	return abs(x1-x2)/abs(y1-y2);
}
bool check()
{
	memset(b,0,sizeof(b));
	for(int i=1;i<=n;i++)
	{
		if(++b[p[i]]==2)
			return 0; //保证不在同一列 
	}
	for(int i=1;i<=n;i++)
		for(int j=i+1;j<=n;j++)
		{
			if(xie(p[i],p[j],i,j)==1||xie(p[i],p[j],i,j)==-1)
				return 0;//保证不在同一对角线上 
		}
	return 1;
}
void dfs(int step)
{
	if(step>n)
	{
		if(check())
		{
			cnt++;
			if(cnt<=3)
			{
				for(int i=1;i<=n;i++)
					cout<<p[i]<<" ";
				cout<<endl;
			}
		}
		return;
	}
	for(int i=1;i<=n;i++)//保证不在同一行 
	{
		p[step] = i;
		dfs(step+1);
	}
}
int main(){
	cin>>n;
	dfs(1);
	cout<<cnt;
	return 0;
}
2023/8/25 16:55
加载中...