求调
查看原帖
求调
1244509
renzhanwen楼主2024/6/11 20:06

样例过了,只有61分,直接上代码。

#include<bits/stdc++.h>
using namespace std;
int n,m,a[100][100];
bool s[100]={false};
bool wow(int i,int j)
{
  	for(int y=1;y<=n;y++)//左下角
  	{
    	if(i+y>n||i-y<1)
      		break;
    	if(a[i+y][j-y]!=0)
       		return false;
  	}
  	for(int y=1;y<=n;y++)//右下角
  	{
    	if(i+y>n||j+y>n)
      		break;
    	if(a[i+y][j+y]!=0)
      		return false;
  	}
  	for(int y=1;y<=n;y++)//左上角
  	{
    	if(i-y<1||j-y<1)
      		break;
   	 	if(a[i-y][j-y]!=0)
      		return false;
  	}
  	for(int y=1;y<=n;y++)
  	{
    	if(i-y<1||j+y>n)
      		break;
    	if(a[i-y][j+y]!=0)
      		return false;
  	}
  	return true;
}
void f(int t)
{
  	if(t>n)
  	{
    	bool x=true;
    	for(int i=1;i<=n;i++)
    	{
      		for(int j=1;j<=n;j++)
      			if(a[i][j]!=0&&wow(i,j)==false)
            		{
              			x=false;
              			break;
            		}
      		if(x==false)
        		break;
    	}
    	if(x==true)
    	{
        	m++;
        	if(m<=3)
        	{
      			for(int i=1;i<=n;i++)
        			for(int j=1;j<=n;j++)
          				if(a[i][j]!=0)
          		  			cout<<j<<" ";
      			cout<<endl;
        	}
    	}
    	return;
  	}
  	for(int i=1;i<=n;i++)
    	if(s[i]==false)
    	{
      		s[i]=true;
      		a[t][i]=t;
      		f(t+1);
      		a[t][i]=0;
      		s[i]=false;
    	}
}
int main()
{
    cin>>n;
    f(1);
    cout<<m;
    return 0;
}
2024/6/11 20:06
加载中...