60AC,40TLE,求各位DALAO帮忙debug,代码:
#include<bits/stdc++.h>
using namespace std;
int a[21][21]={},n,sum=0;
char b[21][21]={};
bool check(int x,int y)
{
int i,j;
for(i=1;i<=x;i++)
{
if(a[i][y]==1)
{
return false;
}
}
for(i=x,j=y;i>=1&&j>=1;i--,j--)
{
if(a[i][j]==1)
{
return false;
}
}
for(i=x,j=y;i>=1&&j<=n;i--,j++)
{
if(a[i][j]==1)
{
return false;
}
}
return true;
}
void dfs(int deep)
{
if(deep==n+1)
{
sum++;
return;
}
int i;
for(i=1;i<=n;i++)
{
if(check(deep,i) && b[deep][i]=='*')
{
a[deep][i]=1;
dfs(deep+1);
a[deep][i]=0;
}
}
}
int main()
{
int i,j;
cin>>n;
char cc;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cin>>b[i][j];
}
}
dfs(1);
cout<<sum;
}
/*
in:
6
out:
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4
*/