样例都过不了啦,dalao救救孩子吧
查看原帖
样例都过不了啦,dalao救救孩子吧
230804
Durancer楼主2020/8/11 08:58
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<cmath>
#include<stack>
using namespace std;
int n,a[30],mp[30],zx[100],yx[100],num=0;//a[]表示某列被占领,mp存放输出数据,,zy,zx分别判断斜方向能否被打倒 
void print()
{
	if(num<=3)
	{
		for(int i=1;i<=n;i++)
		{
			cout<<mp[i]<<" ";		
		}
		cout<<endl;
	}
}
void search(int k)
{	
	if(k>n) 
	{
		num++;
		print();
		return;
	}
	for(int i=1;i<=n;i++)
	{
		if((a[i]==0)&&(zx[i+k]==0)&&(yx[k-i+n]==0))
		{
			mp[k]=i;//存放输出数组 
			a[i]=1;//第i列被战领 
			zx[i+k]=1;//两条对角线 
			yx[k-i+n]=1;
			
			search(k+1);
			
			a[k]=0;
			zx[i+k]=0;
			yx[k-i+n]=0; 
			
		}
		
	}
} 
int main()
{
	cin>>n;
	search(1);
	cout<<num;
	return 0;
}
2020/8/11 08:58
加载中...