hdu 1667 The Rotation Game ( IDA* )】的更多相关文章

题目大意: 给你一个“井”子状的board,对称的由24个方块组成,每个方块上有123三个数字中的一个.给你初始状态,共有八种变换方式,求字典序最小的最短的的变换路径使得,board中间的八个方块上数字相同.(建议看下题目中的图就懂啦). IDA*搜索. 我是干脆用结构体保存搜索状态(当然这样很占空间了,可能也耗时间,不过这题15s/150M的时空限制我也是醉了).保存一个board temp,一个搜索路径path,搜索深度n,以及一个内置的估值函数h().h()返回的是8减这八个方块上出现最多…
先是这周是搜索的题,网站:http://acm.hdu.edu.cn/webcontest/contest_show.php?cid=6041 主要内容是BFS,A*,IDA*,还有一道K短路的,.....木做,本来1009是说要用迭代加深做,但是我在他讲之前就用BFSA了,虽然很耗时,但还是过了,10000MS的时限,我8000+MS....... 1001 Eight  八数码问题 先把代码放上来 题目网址: http://acm.hdu.edu.cn/showproblem.php?pid…
题目大意:略 每次选择一个最大深度K,跑IDA* 估价函数H=8-中间8个格里出现次数最多的数的个数x,即把它填满这个数最少需要8-x次操作,如果dep+H>K,就跳出.. 深搜的时候暴力修改,记录操作的方向,回溯再改回来就行了,根本不用把网格压进状态里嘛.. 又水了一篇博客 #include <queue> #include <cstdio> #include <cstring> #include <algorithm> #define NN 201…
万恶之源 优秀题解 用文字终究难以穷尽代码的思想 思路 每次操作都有八种选择,相当于一棵每次延申八个子节点的搜索树,故搜索应该是一种方法.而这题要求求最少步数,我们就可以想到可以试试迭代加深搜索(但其实我做它因为它是书本的习题).再搭配一个估值函数来剪枝就很香啦. 轮换方块(操作打表) 我的原始思路十分粗暴,就是用一个二维数组来存储这个"#"图形,但是这会十分浪费空间,在写轮换操作时的代码时也很繁冗. 我学到的呢,是用一维数组来存储这个图形,也就是直接用题目的输入生成一个数组.这样进行…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1667 思路:大牛说是IDA*的入门题=.=构造h()=8-max(1,2,3);  max(1,2,3)表示中间的八个位置中出现最多的数的个数. 因为每次操作只能改变中间8个中的一个,所以可以这样构造启发式函数. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #…
//第一次在新博客里发文章好紧张怎么办 //MD巨神早已在一个小时前做完了 The Rotation Game Time Limit: 15000MS Memory Limit: 150000K Total Submissions: 5950 Accepted: 1992 Description The rotation game uses a # shaped board, which can hold 24 pieces of square blocks (see Fig.1). The b…
1. 题目描述有个#字型的条带,可以从横线或竖线进行循环移动,求通过各种移动最终使中心的8个字符全等的长度最短并相同长度字典序最小的操作序列.2. 基本思路24个数据,8种移动方式,数据量很小了,所以基本怎么玩儿都可以.需要注意的是因为横线竖线间有交点,所以每个条带的数据可能都是变化的.采用IDA*算法可解.所谓IDA*,就是不断对所求操作需要长度进行增加,然后不断当前长度是否存在可行的操作序列.判断是否存在可行操作序列的方法是深搜,这里需要注意去除先移动A紧接着移动F的类似情况.H函数的基本想…
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1813 题意:给你一个n*n的迷宫,其中0代表有一个人在这个位置,1代表墙,现在要求一个路线,使所有的人通过这个路线都可以走到迷宫的边界 注意当到达边界就相当于出去了不用继续走了,一个格子可以容纳很多人. 题解:先用BFS求出迷宫内部的点走到边界的最小步数(为了后面的IDA*剪枝),因为有很多状态,不好表示,所以可以想到用IDA*算法,在dfs的时候每次内部的点安同一个方向走,当某个点走到边界或遇见墙时…
状态搜索题目  一开始打算用bfs  但是图给的不是矩形图  有点难以下手 参考了 lrj    将图上所有的点进行标号  直接一个一维数组就解决了图的问题  并且明确了每个点的标号  处理起来十分方便   可见处理不规则图一定要标号解决   之前的万圣节的早晨也是进行标号处理 用IDA* 十分快 启发方程为  d+h()<maxx   显然一次变动最多只改变了中心的一个格子  最多使得 多一个数字填充完毕 很有价值的状态搜索题目 #include<bits/stdc++.h> usin…
The Rotation Game Time Limit: 15000MS   Memory Limit: 150000K Total Submissions: 6325   Accepted: 2134 Description The rotation game uses a # shaped board, which can hold 24 pieces of square blocks (see Fig.1). The blocks are marked with symbols 1, 2…