求助,最后一个点TLE了
查看原帖
求助,最后一个点TLE了
783459
jd123楼主2023/1/24 14:48
int n,cnt;
int a[14][15];
int book[15][15];
int ans[15];//放置列的解
//看该点是否符合
bool pp(int hang)
{
	int x=hang,y=ans[hang];
	for(int i=1;i<hang;i++)
	{
		int x1=i,y1=ans[i];
		if((x1-x==y1-y)||(x1-x==y-y1))
		{
			return 0;
		}
		if(x1==x||y==y1)
		{
			return 0;
		}
	}
	return 1;
}
void dfs(int hang)
{
	if(hang==n+1)
	{
		cnt++;
		if(cnt<=3)
		{
			for(int i=1;i<=n;i++)
			{
				printf("%d ",ans[i]);	
			}	
			printf("\n");
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(book[hang][i]==1)
		{
			continue;
		}else book[hang][i]=1;
		ans[hang]=i;
		//先检查这一次放的点是不是符合的
		if(!pp(hang))
		{
			book[hang][i]=0;
			continue;
		}
		dfs(hang+1);
		book[hang][i]=0;
	}
}
int main()
{
	scanf("%d",&n);
	dfs(1);
	printf("%d",cnt);
	return 0;
}
2023/1/24 14:48
加载中...