真的naive......

我把所有能剪的枝都剪了才过的。否则就是TTT

还有个很神奇的事:数组作为参数传进递归函数时会造成上一层函数里的数组的改变。这个我TM调了一天。

下面奉上代码

 #include <cstdio>
#include <cstring>
using namespace std; int a[][];
int xx,yy; void dfs(bool b[],int x,int y)
{
if(y>) x++,y=;
/* printf("%d %d\n",x,y);
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++) printf("%d ",a[i][j]);
printf("\n");
}
for(int i=0;i<=3;i++)
{
for(int j=1;j<=4;j++) printf("%d ",b[i*4+j]);
printf("\n");
}
printf("\n");
*/
if(x==&&y==)
{
a[][]=-a[][]-a[][]-a[][];
if(a[][]>||a[][]<) {return;} if(b[a[][]]) {return;} b[a[][]]=; for(int i=;i<=;i++)
{
a[][i]=-a[][i]-a[][i]-a[][i];
if(a[][i]>||a[][i]<)
{
for(int j=;j<i;j++) b[a[][j]]=;
b[a[][]]=;
return;
}
if(b[a[][i]])
{
for(int j=;j<i;j++) b[a[][j]]=;
b[a[][]]=;
return;
}
b[a[][i]]=;
}
///b[a[4][1]]=0;b[a[4][2]]=0;b[a[4][3]]=0;b[a[4][4]]=0;b[a[3][4]]=0;
if(a[xx][yy]!=) {b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;return;}
if(a[][]+a[][]+a[][]+a[][]!=) {b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;return;}
if(a[][]+a[][]+a[][]+a[][]!=) {b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;return;}
if(a[][]+a[][]+a[][]+a[][]!=) {b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;return;}
if(a[][]+a[][]+a[][]+a[][]!=) {b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;return;}
if(a[][]+a[][]+a[][]+a[][]!=) {b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;return;}
for(int i=;i<=;i++) if(b[i]!=) {b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;return;}
for(int i=;i<=;i++)
{
for(int j=;j<=;j++) printf("%d ",a[i][j]);
printf("\n");
}
printf("\n");
b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;b[a[][]]=;
return;
}
if(y==)
{
a[x][y]=-a[x][]-a[x][]-a[x][];
if(x==xx&&y==yy&&a[x][y]!=) return;
//printf("%d=34-%d-%d-%d\n",a[x][4],a[x][1],a[x][2],a[x][3]);
if(a[x][y]>||a[x][y]<) {a[x][y]=;return;}
if(b[a[x][y]]) {a[x][y]=;return;}
if(x==) if(a[][]+a[][]+a[][]+a[][]!=) {a[x][y]=;return;}
b[a[x][y]]=;
dfs(b,x,y+);
b[a[x][y]]=;
a[x][y]=;
return;
}
if(x==&&y==)
{
a[x][y]=-a[][]-a[][]-a[][];
if(x==xx&&y==yy&&a[x][y]!=) return;
if(a[x][y]>||a[x][y]<) {a[x][y]=;return;}
if(b[a[x][y]]) {a[x][y]=;return;}
b[a[x][y]]=;
dfs(b,x,y+);
b[a[x][y]]=;
a[x][y]=;
return;
}
if(x==xx&&y==yy)
{
a[x][y]=;
if(b[]) return;
b[]=;
dfs(b,x,y+);
a[x][y]=;
b[]=;
return;
}
for(int i=;i<=;i++)
{
if(b[i]) continue;
a[x][y]=i;
b[i]=; dfs(b,x,y+);
a[x][y]=;
b[i]=;
}
return;
} int main()
{
scanf("%d%d",&xx,&yy);
bool b[]; memset(b,,sizeof(b));
dfs(b,,);
return ;
}

—.—

最近开始重温寒假精英班的课程,从打好搜索开始重新打基~~础~~!

P1274 魔术数字游戏 naive搜索+剪枝的更多相关文章

  1. 【P1274】魔术数字游戏(搜索+剪枝+模拟)

    做完了这个题的我一口老血喷在屏幕上... 这个题难度不高(~~胡扯~~),就是爆搜就可以了,然而..判断条件灰常多,剪枝也就非常多..然而,这些判断条件又不得不必须满足,所以也就十分容易错... 说一 ...

  2. [NOIP2011] mayan游戏(搜索+剪枝)

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  3. 3173. 【GDOI2103模拟3.17】扫雷游戏(搜索 + 剪枝)

    Problem 给出一个类似扫雷的游戏,有\(num\)个数字,求至少有多少个雷. Data constraint \(n,m\le 15,num\le 15\) Solution 好搜索啊. 现讲一 ...

  4. [BZOJ1853][Scoi2010]幸运数字 容斥+搜索剪枝

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 3202  Solved: 1198[Submit][Status ...

  5. Luogu 1312 【NOIP2011】玛雅游戏 (搜索)

    Luogu 1312 [NOIP2011]玛雅游戏 (搜索) Description Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空 ...

  6. 【2020-8-21】【数字游戏】【启发式搜索IDA*】

    有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置.下面是一个例子: ...

  7. 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II

    好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...

  8. NOIP2015 斗地主(搜索+剪枝)

    4325: NOIP2015 斗地主 Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 270  Solved: 192[Submit][Status] ...

  9. Loj10164 数字游戏1

    题目描述 科协里最近很流行数字游戏.某人命名了一种不降数,这种数字必须满足从左到右各位数字成小于等于的关系,如 123,446.现在大家决定玩一个游戏,指定一个整数闭区间 [a,b][a,b][a,b ...

随机推荐

  1. HTML-JS 数组 内置对象

    [JS中的数组] 1.数组的基本概念? 数组是在内存空间中连续存储的一组有序数据的集合 元素在数组中的顺序,称为下标.可以使用下标访问数组的每个元素 2.如何声明一个数组 ① 使用字面量声明:var ...

  2. LDAP-openldap服务部署和测试(YUM安装)

    1. 概述2. 服务端部署过程2.1 软件包说明2.2 部署过程2.3 配置过程3. 测试4. 生成LDIF格式文件4.1 安装migrationtools工具4.2 用migrationtools生 ...

  3. 项目开发之package.json

    Name 必须字段. 提示: 不要在name中包含js, node字样: 这个名字不能以点号或下划线开头: 这个名字不能包含有大写字母: 这个名字可能在require()方法中被调用,所以应该尽可能短 ...

  4. Being a (amateurish) team:团队开发体会

    0x00 Being a (amateurish) team This is the process of changing hydrogen into breathable oxygen, and ...

  5. Linux入门笔记

    1.Linux常用快捷键 按键 作用 Ctrl+d 键盘输入结束或退出终端 Ctrl+s  暂停当前程序,暂停后按下任意键恢复运行 Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg Ctrl ...

  6. 基础-Math.floor与parseInt区别

    Math.floor只能对一个数向下取整,不能解析字符串 如: Math.floor(1.5) // 1 Math.floor(-2.1) // -3 Math.floor("3" ...

  7. Linux下Vim使用备忘

    1.Insert键,决定是Insert模式还是Replace模式. 2.Esc键,退出编辑模式(Insert Or Replace). 3.:wq (ZZ) 保存并退出Vim. http://caib ...

  8. ELK--filebeat详解

    Filebeat提供了几种不同的方式来启用模块: 在modules.d编辑目录中启用模块配置 运行Filebeat 编辑时启用模块 在filebeat.yml文件编辑中启用模块配置 例如,要在 目录中 ...

  9. Uva821-Floyd

    计算所有页面的平均距离. 用floyd求距离,再求平均 #include <algorithm> #include <cstring> #include <ctype.h ...

  10. 【ZOJ2276】Lara Croft(bfs)

    BUPT2017 wintertraining(16) #4 D ZOJ - 2276 题意 n个数字绕成环,有两个指示数字的方块,每次可以顺时针或逆时针移动其中一个,步数是它当前位置的数字a[i], ...