/*
现将相同的合并计数。
再枚举判断是否符合当cou==n*n是符合就退出
*/
#include<stdio.h>
#include<string.h>
#define N 900
int en[N][4],num[N],real[N][4],len,n,ok;
void pp(int a[4],int b[4])//赋值
{
a[0]=b[0];
a[1]=b[1];
a[2]=b[2];
a[3]=b[3];
}
void print(int a[4]) {
printf("%d %d %d %d\n",a[0],a[1],a[2],a[3]);
}
void dfs(int cou)
{
// printf("%d\n",cou);
// if(cou)
// print(en[cou]);
if(cou==n*n) {
ok=1;
return ;
}
if(ok)return ;
int i;
for(i=0;i<len; i++)
{
if(num[i]==0)continue;
if((cou%n==0||en[cou][1]==real[i][3])&&(cou/n==0||en[cou+1-n][2]==real[i][0])) {//注意判断条件对于优化程序很好
pp(en[cou+1],real[i]);
num[i]-=1;
dfs(cou+1);
num[i]+=1;
}
}
return ;
}
int main()
{
int i,k=0,w=0,a,b,c,j,d;
while(scanf("%d",&n),n)
{
ok=0;
memset(num,0,sizeof(num));
len=0;
for(i=1; i<=n*n; i++) {
scanf("%d%d%d%d",&a,&b,&c,&d);
for(j=0;j<len;j++)
if(a==real[j][0]&&b==real[j][1]&&c==real[j][2]&&d==real[j][3])
break;
if(j<len)
num[j]++;
if(j==len) {
real[len][0]=a;real[len][1]=b;
real[len][2]=c;real[len][3]=d;
num[len++]=1;
}
}//这里需要这样储存相同的,感觉有点坑啊 ,原来我的是先储存下来在合并合同的但是chaoshi,改成这样就不超时ile if(w)
printf("\n");
dfs(0);
if(ok)
printf("Game %d: Possible\n",++k);
else
printf("Game %d: Impossible\n",++k);
w=1;
}
return 0;
}

zoj 1008 暴力枚举求解dfs+优化的更多相关文章

  1. ZOJ 1008 Gnome Tetravex(DFS)

    题目链接 题意 : 将n*n个正方形进行排列,需要判断相邻的正方形的相邻三角形上边的数字是不是都相等. 思路 : 只知道是个深搜,一开始不知道怎么搜,后来看了题解才明白,就是说不是自己去搜,而是将给定 ...

  2. [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)

    Generalized Palindromic Number Time Limit: 2 Seconds      Memory Limit: 65536 KB A number that will ...

  3. HDU 4770 Lights Against Dudely 暴力枚举+dfs

    又一发吐血ac,,,再次明白了用函数(代码重用)和思路清晰的重要性. 11779687 2014-10-02 20:57:53 Accepted 4770 0MS 496K 2976 B G++ cz ...

  4. [Cqoi2015] 编号 【逆向思维,暴力枚举】

    Online Judge:Luogu-P4222 Label:逆向思维,暴力枚举 题目描述 你需要给一批商品编号,其中每个编号都是一个7位16进制数(由0~9, a-f组成).为了防止在人工处理时不小 ...

  5. Codeforces Round #349 (Div. 1) B. World Tour 最短路+暴力枚举

    题目链接: http://www.codeforces.com/contest/666/problem/B 题意: 给你n个城市,m条单向边,求通过最短路径访问四个不同的点能获得的最大距离,答案输出一 ...

  6. POJ-3187 Backward Digit Sums (暴力枚举)

    http://poj.org/problem?id=3187 给定一个个数n和sum,让你求原始序列,如果有多个输出字典序最小的. 暴力枚举题,枚举生成的每一个全排列,符合即退出. dfs版: #in ...

  7. P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)

    技巧:就是偶数位的回文数字一定不是质数---------证明:奇数位之和sum1==偶数位之和sum2的数字可以被11整除.(11除外,这是一个坑点) 最高位,最低位必须是 1, 3, 7, 9 暴力 ...

  8. UVA.12716 GCD XOR (暴力枚举 数论GCD)

    UVA.12716 GCD XOR (暴力枚举 数论GCD) 题意分析 题意比较简单,求[1,n]范围内的整数队a,b(a<=b)的个数,使得 gcd(a,b) = a XOR b. 前置技能 ...

  9. HDU 3699 A hard Aoshu Problem(暴力枚举)(2010 Asia Fuzhou Regional Contest)

    Description Math Olympiad is called “Aoshu” in China. Aoshu is very popular in elementary schools. N ...

随机推荐

  1. bzoj 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富【记忆化搜索+剪枝】

    c[x][y]为从(x,y)到(n,m)的最大值,记忆化一下 有个剪枝是因为y只能+1所以当n-x>m-y时就算x也一直+1也是走不到(n,m)的,直接返回0即可 #include<ios ...

  2. object-c中实现特定一个或者多个页面横竖屏,其他界面保持竖屏显示。

    1.首先设置项目支持的屏幕方向.info.plist设置(自行设置) 2.写一个子类CusNavigationController 继承 UINavigationController,在CusNavi ...

  3. Spring 中 ApplicationContext 和 BeanFactory 的区别,以及 Spring bean 作用域

    //从ApplicationContext 中取 bean ApplicationContext ac = new ClassPathXmlApplicationContext ( "com ...

  4. EditText(7)EditText输入事件监听

    EditText.addTextChangedListener(TextWatcher watcher); void initSearch(){ search = (EditText) findVie ...

  5. Android 五种方式实现Android底部导航栏

    https://segmentfault.com/a/1190000007697941

  6. PSP需求分析文档

    PSP软件需求分析文档 刘杰 1.       引言 1.1  背景 开发项目经常延期不能按时提交,甚至不能给出明确的延迟时间 1.2  术语 PSP,数据库 2.       任务概述 2.1  目 ...

  7. LDA算法(入门篇)

    一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD ...

  8. 你的宽带ip地址被100.64了吗?

    你的宽带ip地址被100.64了吗?   最近需要用外网的时候发现,宿舍路由wan口的ip变成了100.64.X.X,本以为是一个外网的ip,可事实上并不是,并且从外网无法直接访问.   首先,我们都 ...

  9. 【CImg】基本像素操作

    继openCV之后接触的又一个C++视觉库——短小精干的CImg 刚开始接触的时候真的是..几乎无从下手,网上资料比较少,但发现有一篇非常有用的中文手册:http://wenku.baidu.com/ ...

  10. URL解析-URLComponents

    let components = URLComponents(url: fakeUrl, resolvingAgainstBaseURL: false)! http://10.100.140.84/m ...