/*
现将相同的合并计数。
再枚举判断是否符合当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. python/shell脚本报异常^M: bad interpreter: No such file or directory

    问题:在Windows写了一python脚本,上传Linux服务器执行,报异常*****^M: bad interpreter: No such file or directory 原因:window ...

  2. 使用JS分页 <span> beta 2.0 未封装的分页

    <html> <head> <title>分页</title> <style> #titleDiv{ width:500px; backgr ...

  3. fiddler不同代理模式的区别

    Fiddler有不同的代理模式,分为以下两种: 流模式(Streaming)和缓冲模式(Buffering). 流模式可以理解为一种实时通信的模式,有请求就有返回,也就是实时返回. 缓冲模式是等所有请 ...

  4. Docker (1) 基本概念和安装

    Docker简介 什么是容器? 一种虚拟化的方案,操作系统级别的虚拟化.容器是一个轻量的.独立的.可执行的包,包含了执行它所需要的所有东西:代码.运行环境.系统工具.系统库.设置.很长一段时间中,容器 ...

  5. 在Redux中使用插件createAction之后

    我们知道在React的Redux的中的action在项目开发过程中,一般时使用createAction来生成 举个栗子,小李子: const createTodo=createACtion('CREA ...

  6. Android学习笔记(四) JAVA基础知识回顾

    一.接口 1)接口中定义的方法都是public权限,并且默认为public,而不是default. 2)接口的实现(implements)是特殊的继承,类似于父类子类的关系,可以向上转型(非常重要). ...

  7. strong,weak, retain, assign的区别@property的参数

    strong,weak, retain, assign的区别@property的参数 先说经验 使用场合 copy:NSString,block, weak:UI控件,代理 strong:一般对象.自 ...

  8. jstree的基本应用----记录

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. js获取图片信息(一)-----获取图片的原始尺寸

    如何获取图片的原始尺寸大小? 如下,当给 img 设置一个固定的大小时,要怎样获取图片的原始尺寸呢? #oImg{ width: 100px; height: 100px; } <img src ...

  10. OpenGL坐标系之间的转换 http://blog.csdn.net/sac761/article/details/52179585

    1. OpenGL 渲染管线 OpenGL渲染管线分为两大部分,模型观测变换(ModelView Transformation)和投影变换(Projection Transformation).做个比 ...