a1填空,dfs暴力
作者:
Air1222
,
2025-04-09 19:05:35
· 江苏
,
所有人可见
,
阅读 9
#include <iostream>
using namespace std;
const int N = 10;
int c1[N];
int c2[N];
int r1[N];
int r2[N];
int x1;
int x2;
int bx1;
int bx2;
int ans;
void dfs(int x,int s1,int s2)
{
for(int i=0;i<5;i++)
if(c1[i]>=5||c2[i]>=5||r1[i]>=5||r2[i]>=5||x1>=5||x2>=5||bx1>=5||bx2>=5)
return;
if(s1<0||s2<0) return;
if(s1==0&&s2==0)
{
ans++;
return;
}
if(x==25) return;
c1[x/5]++;
r1[x%5]++;
if(x%5==x/5) x1++;
if(4-x%5==x/5) bx1++;
dfs(x+1,s1-1,s2);
if(x%5==x/5) x1--;
if(4-x%5==x/5) bx1--;
c1[x/5]--;
r1[x%5]--;
c2[x/5]++;
r2[x%5]++;
if(x%5==x/5) x2++;
if(4-x%5==x/5) bx2++;
dfs(x+1,s1,s2-1);
c2[x/5]--;
r2[x%5]--;
if(x%5==x/5) x2--;
if(4-x%5==x/5) bx2--;
}
int main()
{
dfs(0,12,13);
cout<<ans;
return 0;
}