#include<iostream>
using namespace std;
string s[20];
bool flag[20][20]={0},l[100]={0},lx[100]={0},rx[100]={0};
int n,cnt;
void Search(int x)
{
if(x>n)
{
cnt++;
return;
}
for(int i=1;i<=n;i++)
{
if(!l[i]&&!lx[i+x]&&!rx[x-i+n]&&!flag[x][i])
{
l[i]=true;
lx[i+x]=true;
rx[x-i+n]=true;
Search(x+1);
l[i]=false;
lx[i+x]=false;
rx[x-i+n]=false;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s[i];
int len=s[i].size();
for(int j=0;j<len;j++)
{
if(s[i][j]=='.')
{
flag[i][j+1]=true;
}
}
}
Search(1);
cout<<cnt;
return 0;
}
试图用short减少时间,结果9WA 提交记录
#include<iostream>
using namespace std;
string s[20];
bool flag[20][20]={0},l[100]={0},lx[100]={0},rx[100]={0};
short int n,a[20],i,j;
int cnt;
void Search(short int x)
{
if(x>n)
{
cnt++;
return;
}
for(i=1;i<=n;i++)
{
if(!l[i]&&!lx[i+x]&&!rx[x-i+n]&&!flag[x][i])
{
a[x]=i;
l[i]=true;
lx[i+x]=true;
rx[x-i+n]=true;
Search(x+1);
l[i]=false;
lx[i+x]=false;
rx[x-i+n]=false;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(i=1;i<=n;i++)
{
cin>>s[i];
short int len=s[i].size();
for(j=0;j<len;j++)
{
if(s[i][j]=='.')
{
flag[i][j+1]=true;
}
}
}
Search(1);
cout<<cnt;
return 0;
}