题目:https://www.luogu.org/problemnew/show/P1092

剪枝1:从右往左、从上往下按字母出现顺序搜索;

剪枝2:同一列前两个数字确定,可直接算出第三个数字并判断;

剪枝3:每次搜索前看看前面的列上有没有已经不符合的情况(进位最多为1);

代码如下:

#include<iostream>
#include<cstdio>
using namespace std;
int n,c[300],jin[30];
char a[5][30];
bool vis[30],p[300];
bool check(int y)
{
for(int i=y;i>=0;i--)
if(p[a[1][i]]&&p[a[2][i]]&&p[a[3][i]]&&
((c[a[1][i]]+c[a[2][i]])%n!=c[a[3][i]])&&
((c[a[1][i]]+c[a[2][i]]+1)%n!=c[a[3][i]]))return 1;
return 0;
}
void ser(int x,int y)
{
if(check(y))return;
if(y<0)
{
for(int i=65;i<=91;i++)
if(p[i])
printf("%d ",c[i]);
return;
}
if(x==3)
{
int k=c[a[1][y]]+c[a[2][y]]+jin[y];
int t=0;
while(k>=n)t++,k-=n;
jin[y-1]=t;
// printf("y=%d k=%d jin[%d]=%d\n",y,k,y,jin[y]);
// jin[y]=0;
if(!p[a[x][y]]&&!vis[k])
{
// printf("%c=%d\n",a[x][y],k);
c[a[x][y]]=k;
p[a[x][y]]=1;
vis[k]=1;
ser(1,y-1);
c[a[x][y]]=0;
p[a[x][y]]=0;
vis[k]=0;
return;
}
else if(p[a[x][y]]&&vis[k]&&c[a[x][y]]==k)
{
ser(1,y-1);
return;
}
else
{
// jin[y-1]=0;
return;
}
}
else if(!p[a[x][y]])
{
for(int i=0;i<n;i++)
{
if(!vis[i])
{
// printf("x=%d y=%d a=%c i=%d\n",x,y,a[x][y],i);
c[a[x][y]]=i;
p[a[x][y]]=1;
vis[i]=1;
ser(x+1,y);
c[a[x][y]]=0;
p[a[x][y]]=0;
vis[i]=0;
}
}
}
else ser(x+1,y);
}
int main()
{
scanf("%d ",&n);
cin>>a[1];
cin>>a[2];
cin>>a[3];
ser(1,n-1);
return 0;
}
/*
20 NLHFIEASBRQJOGKMDPCT NQGPSIIGKDMFDCBFMQSO PNKNTOLHEIJHFGJKHJGG
*/

  

最新文章

  1. markdown语法练习
  2. 月四 周2 iii
  3. SSH Tunneling
  4. CLR via C#(05)- 访问限定、数据成员
  5. JS实现图片上传预览效果:方法一
  6. 初次使用C#中的yield
  7. SSH权威指南(转载)
  8. iOS-关于微信支付
  9. (int)、(int&amp;)和(int*)的区别(转)
  10. js 作用域,变量提升
  11. CentOS 6.3 配置FTP
  12. liunx下安装mysql没有初始密码的解决方法
  13. JAVA中获取当前运行的类名,方法名,行数
  14. 第二篇:利用shell脚本执行webservice请求——基于soap
  15. ORACLE ORA-01653: unable to extend table 的错误
  16. Quill 富文本编辑器
  17. Photoshop 操作
  18. Java HttpURLConnection发送post请求示例
  19. [Codeforces671D]Roads in Yusland
  20. centos6.9安装mysql5.7.18

热门文章

  1. .NET C# Json序列化与反序列化——Newtonsoft.Json学习笔记
  2. 安装部署Solrcloud
  3. 【Selenium + Python】之如何获取最新的报告以及os.path.getmtime与os.path.getctime的区别
  4. sublime3 支持 jsx 语法
  5. x86 的 TSS 任务切换机制
  6. eclipse如何debug调试jdk源码
  7. android假设给TextView或EditText的email链接加下划线,并在点击在email连接上能够弹框显示
  8. 10个迷惑新手的Cocoa&amp;Objective-c开发问题
  9. 【BZOJ3721】PA2014 Final Bazarek 贪心
  10. 该 Bucket 已存在,或被其他用户占用