例 7-10 uva12212(迭代加深搜索)
题意:对于一段数字,每次可以剪切一段连续的自然数,粘贴到任意部分,使其变成升序
思路:
考虑的是进行搜索,深搜并不能保证是最短,广搜感觉每层的情况太多。
迭代加深:枚举搜索深度,然后进行深搜。
这种方法比较适用于不知道明显深度的,以及每层展开情况过多而导致bfs不行的。
- #include <iostream>
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <cstdlib>
- #include <queue>
- #include <algorithm>
- typedef long long ll;
- using namespace std;
- int maxd;
- int n;
- struct node
- {
- int matrix[12];
- };
- int get_h(node t) //可能进行的最大深度
- {
- int num = 0,i;
- for(i = 1; i < n; i++)
- if(t.matrix[i] + 1 != t.matrix[i+1])
- num ++;
- if(t.matrix[i] != n)
- num++;
- return num;
- }
- node change(int from,int to,int x,node t) //利用数组替代指针
- {
- int tot;
- int next[20],tmp[20];
- for(int i=0; i <= n; i++)
- tmp[i]=t.matrix[i],next[i]=i+1;
- next[from-1]=to+1;
- next[x]=from;
- next[to]=x+1;
- for(int i=next[0],tot=1; tot<=n; i=next[i],tot++)
- {
- t.matrix[tot]=tmp[i];
- }
- return t;
- }
- bool dfs(node cur,int tt)
- {
- int h = get_h(cur);
- int flag = 1;
- for(int i = 1; i <= n; i++)
- {
- if(cur.matrix[i] != i);
- {
- flag = 0;
- break;
- }
- }
- if(flag )
- return true;
- if(tt == maxd)
- return h == 0;
- if(tt*3+h > maxd*3)
- return false;
- for(int from = 1; from <= n; from++)
- for(int to = from; to <= n; to++)
- for(int i = 0; i <= n; i++)
- {
- node tp;
- memcpy(tp.matrix,cur.matrix,sizeof(int)*(n+1));
- if(i >= from-1 && i <= to)
- continue;
- tp = change(from,to,i,tp);
- if(dfs(tp,tt+1))
- return true;
- }
- return false;
- }
- char ch;
- int main()
- {
- int cas = 1;
- while(scanf("%d",&n) && n)
- {
- node from;
- for(int i = 1; i <= n; i++)
- scanf("%d",&from.matrix[i]);
- for(maxd = 0;; maxd++) //搜索深度
- {
- if(dfs(from,0))
- break;
- }
- printf("Case %d: %d\n",cas++,maxd);
- }
- return 0;
- }
例 7-10 uva12212(迭代加深搜索)的更多相关文章
- 洛谷P3052 [USACO12MAR]摩天大楼里的奶牛 [迭代加深搜索]
题目传送门 摩天大楼里的奶牛 题目描述 A little known fact about Bessie and friends is that they love stair climbing ra ...
- 【bzoj1085】【 [SCOI2005]骑士精神】启发式剪枝+迭代加深搜索
(上不了p站我要死了,侵权度娘背锅) 如果这就是启发式搜索的话,那启发式搜索也不是什么高级玩意嘛..(啪啪打脸) Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且 ...
- 【算法•日更•第三十九期】迭代加深搜索:洛谷SP7579 YOKOF - Power Calculus 题解
废话不多说,直接上题: SP7579 YOKOF - Power Calculus 题意翻译 (略过没有营养的题干) 题目大意: 给出正整数n,若只能使用乘法或除法,输出使x经过运算(自己乘或除自己, ...
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
- 迭代加深搜索 codevs 2541 幂运算
codevs 2541 幂运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 从m开始,我们只需要6次运算就可以计算出 ...
- UVA 529 - Addition Chains,迭代加深搜索+剪枝
Description An addition chain for n is an integer sequence with the following four properties: a0 = ...
- 迭代加深搜索 C++解题报告 :[SCOI2005]骑士精神
题目 此题根据题目可知是迭代加深搜索. 首先应该枚举空格的位置,让空格像一个马一样移动. 但迭代加深搜索之后时间复杂度还是非常的高,根本过不了题. 感觉也想不出什么减枝,于是便要用到了乐观估计函数(O ...
- C++解题报告 : 迭代加深搜索之 ZOJ 1937 Addition Chains
此题不难,主要思路便是IDDFS(迭代加深搜索),关键在于优化. 一个IDDFS的简单介绍,没有了解的同学可以看看: https://www.cnblogs.com/MisakaMKT/article ...
- UVA11212-Editing a Book(迭代加深搜索)
Problem UVA11212-Editing a Book Accept:572 Submit:4428 Time Limit: 10000 mSec Problem Description ...
- BZOJ.1085.[SCOI2005]骑士精神(迭代加深搜索)
题目链接 最小步数这类,适合用迭代加深搜索. 用空格走代替骑士. 搜索时记录上一步防止来回走. 不需要每次判断是否都在位置,可以计算出不在对应位置的骑士有多少个.而且每次复原一个骑士至少需要一步. 空 ...
随机推荐
- 源端控制的OpenFlow数据面
OpenFlow 交换机一般采用 TCAM 存储和查找流表,从而带来了扩展性.成本和能耗的问题.TCAM 成本和能耗过高,存储容量有限,一般交换机中的 TCAM 仅能存储几千条流表项,对 OpenFl ...
- httpClient 中的post或者get请求
httpClient相对于java自带的请求功能更加强大,下面就以例子的形式给出: //HttpClient Get请求 private static void register() { try { ...
- wyh的数列~(坑爹题目)
链接:https://www.nowcoder.com/acm/contest/93/K来源:牛客网 题目描述 wyh学长特别喜欢斐波那契数列,F(0)=0,F(1)=1,F(n)=F(n-1)+F( ...
- Microsoft Soft SQL Server 大数据----分区表性能测试
分区表 MSSQL有一个大数据储存方案,可以提高效率那就是分区表. 使用起来跟普通表没有区别.至于具体原理自己度娘吧. 真正性能的提高,是依赖于硬件的加入.也是就说,当把一个表设置成分区表,每一个分区 ...
- Mybatis的原始dao开发方法
在进入主题之前先提一下sqlSession.sqlSession是一个面向用户(程序员)的接口. sqlSession中提供了很多操作数据库的方法,如: selectOne(返回单个对象).selec ...
- Web Service的工作原理
Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的 ...
- kubernetes入门(05)kubernetes的核心概念(2)
一.使用 kubectl run 创建 pod(容器) 命令 kubectl run类似于 docker run,可以方便的创建一个容器(实际上创建的是一个由deployment来管理的Pod): 等 ...
- Linux实战案例(5)关闭Centos的防火墙
1.检查防火墙的状态 [root@LxfN1 ~]# service iptables status表格:filterChain INPUT (policy ACCEPT)num target pro ...
- Spring Security 入门(1-7)Spring Security - Session管理
参考链接:https://xueliang.org/article/detail/20170302232815082 session 管理 Spring Security 通过 http 元素下的子元 ...
- JDBC学习笔记 day1
JDBC的基本概念: JDBC就是java database connectivity,即java数据库连接. JDBC主要完成的几个任务分别为 与数据库建立一个连接 向数据库发送SQL语句 处理数据 ...