#include<stdio.h>
int n;
int p[1000][1000];
int sum,half,count,k;
void dfs(int k){
if(k>n){
if(count==half){
sum++;
}
return ;
}
else{
for(int i=0;i<=1;i++){
p[1][k]=i;
count+=i;
for(int j=2;j<=k;j++){
p[j][k-j+1]=p[j-1][k-j+1]^p[j-1][k-j+2];
count+=p[j][k-j+1];
}
if(count<=half&&(k+1)*k/2-count<=half){
dfs(k+1);
}
for(int j=2;j<=k;j++){
count-=p[j][k-j+1];
}
count-=i;
}
}
}
int main(){
scanf("%d",&n);
half=n*(n+1)/4;
dfs(1);
printf("%d",sum);
}
符号三角回溯
最新推荐文章于 2025-12-02 21:26:40 发布
该代码实现了一个使用深度优先搜索(DFS)的算法,用于解决棋盘填数问题。程序读取棋盘大小n,然后计算并输出所有可能的填数方案数量。在过程中,通过位运算更新棋盘状态,并确保计数在预设范围内。
666

被折叠的 条评论
为什么被折叠?



