真的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. Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)-D- Array Restoration

    我们知道不满足的肯定是两边大中间小的,这样就用RMQ查询两个相同等值的区间内部最小值即可,注意边界条件 #include<bits/stdc++.h> #define x first #d ...

  2. MSF MS11-050/10-087/Adobe攻击实践及内存保护技术

    MSF MS11-050/10-087/Adobe攻击实践及内存保护技术 内存攻击指的是攻击者利用软件安全漏洞,构造恶意输入导致软件在处理输入数据时出现非预期错误,将输入数据写入内存中的某些特定敏感位 ...

  3. Leetcode——171.Excel表列序号【水题】

    @author: ZZQ @software: PyCharm @file: leetcode171_Excel表列序号.py @time: 2018/11/22 15:29 要求: 给定一个Exce ...

  4. sprint最后冲刺-out to out

    摘要:团队合作.实现四则APP,上传代码到github. 1.之前我们队一直无法把代码上传到github.直到今天.找到了一种可以协助代码上github的软件msysgit. 经过:(一行行看) 我们 ...

  5. [2017BUAA软工]第零次作业

    第一部分:结缘计算机     你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答) 我当初选择计算机,是因为:1.北航的前辈对北航计算机专业评价非常高:2.我也喜欢通过编程来代替我完成 ...

  6. 【转】Linux tail 命令详解

    Linux tail 命令详解 http://www.2cto.com/os/201111/110143.html

  7. redi集群测试

    redis集群的测试   原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg10.html 1.测试存取值 客户端连接集群redis-cli需要带上 -c ...

  8. Centos7搭建LAMP+Typecho博客

    一.安装Apache的httpd服务 yum install httpd # 安装httpd服务 systemctl start httpd # 启动httpd服务 systemctl status ...

  9. [转帖] .NET FrameWork 版本的确定方法

    检测电脑安装的net framework版本   https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx To find .N ...

  10. mysql常用增删改查命令(纯纪录.orm用得基本功都没了。)

    更新表数据: update table_name set xxx=xxx where condition; 增加字段: alter table table_name add field type ot ...