2 条题解

  • 3
    @ 2022-11-12 18:01:11

    ** 求为什么比普通做法快(指最大数据330ms+)

    #include<bits/stdc++.h>
    using namespace std;
    bool ans[15][15];
    bool line[15];
    int num=0;
    int n;
    bool check(int a,int b)
    {
    	for(int i=1;i<a;i++)
    	{
    		if(b-i>=1)
    			if(ans[a-i][b-i]==1)
    				return 0;
    		if(b+i<=n)
    			if(ans[a-i][b+i]==1)
    				return 0;
    	}
    	return 1;
    }
    void dfs(int now)
    {
    	if(now==n+1)
    	{
    		num++;
    		if(num<=3)
    		{
    			for(int i=1;i<=n;i++)
    				for(int j=1;j<=n;j++)
    					if(ans[i][j]==1)cout<<j<<' ';
    			cout<<"\n";
    		}
    		return;
    		
    	}
    	for(int i=1;i<=n;i++)
    	{
    		if(line[i]==0&&check(now,i)==1)
    		{
    			line[i]=1;
    			ans[now][i]=1;
    			
    			dfs(now+1);
    			
    			line[i]=0;
    			ans[now][i]=0;
    		}
    	}
    }
    int main()
    {
    	cin>>n;
    	dfs(1);
    	cout<<num;
    	return 0;
    }
    

    信息

    ID
    944
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    39
    已通过
    21
    上传者