大佬们帮蒟蒻看一下按我的写法还有没有优化空间。。最后一个点T了。。
查看原帖
大佬们帮蒟蒻看一下按我的写法还有没有优化空间。。最后一个点T了。。
396814
LostELKv楼主2021/3/17 23:24
#include<bits/stdc++.h>
using namespace std;
int mp[41][41];
int b[41];
int n,ans=0,k=1;
void dfs(int s)
{
	if(s>n&&k<=3)
	{
		ans++;k++;
		for(int i=1;i<=n;i++)
			printf("%d ",b[i]);
		printf("\n");
		return;
	}
	if(s>n&&k>3)
	{
		ans++;
		return;
	}
	for(int i=1;i<=n;i++)
	{
		int flag=1;
		for(int j=1;j<=n;j++)
			if(mp[j][i]!=0)
			{
				flag=0;break;
			}
		if(flag==0)
			continue;
		for(int j=1;j<=s+i-1;j++)
			if(mp[j][s+i-j]!=0)
			{
				flag=0;break;
			}
		if(flag==0)
			continue;
		if(s-i>=0)
		{
			int p=s-i;
			for(int j=1;j+p<=n;j++)
				if(mp[j+p][j]!=0)
				{
					flag=0;break;
				}
			if(flag==0)
				continue;
		}
		else
		{
			int p=i-s;
			for(int j=1;j+p<=n;j++)
				if(mp[j][j+p]!=0)
				{
					flag=0;break;
				}
			if(flag==0)
				continue;
		}
		mp[s][i]=1;b[s]=i;
		dfs(s+1);
		mp[s][i]=0;b[s]=0;
	}
	return;
}
int main()
{
	scanf("%d",&n);
	dfs(1);
	printf("%d",ans);
	return 0;
}
2021/3/17 23:24
加载中...