UVa 1343 旋转游戏(dfs+IDA*)】的更多相关文章

https://vjudge.net/problem/UVA-1343 题意:如图所示,一共有8个1,8个2和8个3,如何以最少的移动来使得中间8个格子都为同一个数. 思路:状态空间搜索问题. 用IDA*算法的话会比较快,而且代码比较简洁. IDA*的关键就是要寻找一个估价函数h(),在这道题目中,每次移动最多只会使一个格子的数字正确,所以当maxd-d<h()时便可以剪枝. #include<iostream> #include<string> #include<cs…
UVA - 11853 思路:dfs,从最上面超过上边界的圆开始搜索,看能不能搜到最下面超过下边界的圆. 代码: #include<bits/stdc++.h> using namespace std; ; double l,r; int n; bool vis[N]={false}; bool flag=false; struct point { int x,y,r; }a[N]; bool intersect(point a,point b) { return (a.x-b.x)*(a.x…
UVA.548 Tree(二叉树 DFS) 题意分析 给出一棵树的中序遍历和后序遍历,从所有叶子节点中找到一个使得其到根节点的权值最小.若有多个,输出叶子节点本身权值小的那个节点. 先递归建树,然后DFS求解. 代码总览 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <string> #include <sstre…
The rotation game uses a # shaped board, which can hold 24 pieces of square blocks (see Fig.1). The blocksare marked with symbols 1, 2 and 3, with exactly 8 pieces of each kind.Initially, the blocks are placed on the board randomly. Your task is to m…
https://vjudge.net/problem/UVA-1374 题意:给出n,计算最少需要几次能让x成为x^n(x和已经生成的数相乘或相除). 思路:IDA*算法. 如果当前数组中最大的数乘以1<<(maxd-d)<n(即一直让最大的数相乘都无法到达n次方),此时可以剪枝. #include<iostream> #include<cstring> #include<algorithm> using namespace std; ; int n;…
https://vjudge.net/problem/UVA-11212 题意:给出n个自然段组成的文章,将他们排列成1,2...,n.每次只能剪切一段连续的自然段,粘贴时按照顺序粘贴. 思路:状态空间的搜索问题. 首先介绍一下IDA*,它属于DFS,在DFS遍历的时候,设定一个深度上限maxd,当前结点n的深度为g(n),乐观估价函数为h(n),则当g(n)+h(n)>maxd时应           该剪枝.这样的算法就是IDA*. 在这道题目中,由于最多就9个数,所以最多只需要剪切8次肯定…
题目链接 紫书例题. 首先附上我第一次bfs+剪枝TLE的版本: #include<bits/stdc++.h> using namespace std; typedef long long ll; +,inf=0x3f3f3f3f; ]= { {,,,,,,}, {,,,,,,}, {,,,,,,}, {,,,,,,}, {,,,,,,}, {,,,,,,}, {,,,,,,}, {,,,,,,}, }; ,,,,,,,}; void rot(int* c,int x) { const in…
题意:有个#字型的棋盘,2行2列,一共24个格. 如图:每个格子是1或2或3,一共8个1,8个2,8个3. 有A~H一共8种合法操作,比如A代表把A这一列向上移动一个,最上面的格会补到最下面. 求:使中心8个格子数字一致的最少步骤,要输出具体的操作步骤及最终中心区域的数字.如果有多个解,输出字典序最小的操作步骤. 分析 : 还是状态空间的搜索,对象就是一个数字序列,判断中心位置是否一样,可以看出如果使用BFS,每一层还是爆炸,所以使用IDA*,关键还是模拟操作和h函数,这里的h函数是这样定义的,…
题意: 给出图,往A-H方向旋转,使中间8个格子数字相同.要求旋转次数最少,操作序列字典序尽量小. 分析: 用一维数组存24个方格.二维数组代表每个方向对应的7个方格.IDA*剪枝是当8-8个方格中重复字母最多的那个字母数量>maxd. 代码: #include <iostream>#include <cstring>#include <algorithm>#include <cstdio>using namespace std;int a[24];i…
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P4205 [NOI2005]智慧珠游戏 题目描述 智慧珠游戏拼盘由一个三角形盘件和 12 个形态各异的零件组成.拼盘的盘 件如图1所示 对于由珠子构成的零件,可以放到盘件的任一位置,条件是能有地方放,且尺寸合适,所有的零件都允许旋转(0º.90º.180º.270º)和翻转(水平.竖直). 现给出一个盘件的初始布局,求一种可行的智慧珠摆放方案,使所有的…