hdu 4127 A*搜索

题意:

  对一个 8x8的矩阵,有6种颜色可选,每次只能改变最左上角的颜色,改变的结果是,与该点连通的所有点都染成该颜色,问最少几次可以将整个图染成一样的颜色。

解法:

  A* 搜索,估价函数为,若选择颜色 k,可以有多少格子在这次操作中被加入连通块,若估价为0,则剪掉。

  vis[i][j] 可能为 0 1 2 为1 则代表该点在连通块中,为 2则代表该点与连通块相邻, 否则为0。

  对当前局面,我们可以求出连通块以外还有多少种颜色,则最少需要这么多次操作可能完成目的。只是可能。我们将初始图中连通块外颜色数设置为可能完成目的的最少操作数。基于这个操作数,我们去验证是否可行。若不可行,数字+1,再去验证。直到找到可行解。

 

待补。

时间: 2024-10-31 12:16:53

hdu 4127 A*搜索的相关文章

HDU 2828 DLX搜索

Lamp Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 771    Accepted Submission(s): 230 Special Judge Problem Description There are several switches and lamps in the room, however, the connecti

HDU 1518 Square 搜索

Square Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 11   Accepted Submission(s) : 5 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Given a set of sticks of vario

HDU 4499.Cannon 搜索

Cannon Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 965    Accepted Submission(s): 556 Problem Description In Chinese Chess, there is one kind of powerful chessmen called Cannon. It can move

hdu 3500 还是搜索

这道题目由于每走一步的时候毛毛球是可以变换的 换言之 主体不唯一 所以这里搜索的设计有变化 再就是几个回溯的过程要注意.,.  小心使得万年船 #include <iostream> #include <cstdio> using namespace std; char map[10][10]; int num; int flag; int mmove; int dir[4][2] = {{-1,0},{0,-1},{0,1},{1,0}}; //U.L.R.D char tow[

HDU 1242 (BFS搜索+优先队列)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1242 题目大意:多个起点到一个终点,普通点耗时1,特殊点耗时2,求到达终点的最少耗时. 解题思路: 如果没有特殊点,就是普通BFS. 由于特殊点的介入,所以对于一个点,可能由不同种方式到达,所以使用优先队列,对于一个点,最先取出的点用的方式肯定是最优的. 同时使用优先队列也为BFS过程提供一个剪枝,因为最先到达肯定是最优结果,只要搜到第一个结果,后面就不用搜了. 注意有多个起点,所以先记录下所有起

HDU 4294 Multiple(搜索+数学)

题意: 给定一个n,让求一个M,它是n个倍数并且在k进制之下 M的不同的数字最少. 思路: 这里用到一个结论就是任意两个数可以组成任何数的倍数.知道这个之后就可以用搜索来做了.还有一个问题就是最多找n+1个数,因为由鸽巢原理,这n+1个数当中模上n一定有一个一同的.所以他们一减就是答案.如果找到直接是它的倍数的话,就直接返回. 搜索时保存的是它的余数,如果余数为0 的时候直接返回.还有就是在搜索中并不是直接找余数相同的两个数.而是找余数为0的.当暴力不同元素个数为2的时候,这时候已经算是找余数刚

HDU 1180 (BFS搜索)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1180 题目大意:迷宫中有一堆楼梯,楼梯横竖变化.这些楼梯在奇数时间会变成相反状态,通过楼梯会顺便到达前进方向的下一个点(跳过楼梯). 同时可以在原地等待,问到达终点的最少时间. 解题思路: 很有趣的一个题. 还是先BFS,对于一个楼梯,change函数负责计算出走楼梯能够到达的新的X和Y,再判一次是否越界或不可达. 注意,在'.'点是可以原地等待的,需要额外Push这个点,这也是这题不会出现走不出

HDU 2531 (BFS搜索)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2531 题目大意: 你的身体占据多个点.每次移动全部的点,不能撞到障碍点,问撞到目标点块(多个点)的最少步数. 解题思路: 挺有趣的一个题,每次要移动多个点. 如果只移动一个点,就是个简单粗暴的BFS. 多个点照样处理,读图的时候把扫到的第一个点当作移动点,然后vector记录下身体的其它点与该移动点的相对坐标. BFS的时候,先看看移动点能不能动,然后再根据身体的相对坐标还原出身体的绝对坐标,看看

HDU 5305 Friends (搜索+剪枝) 2015多校联合第二场

開始对点搜索,直接写乱了.想了想对边搜索,尽管复杂度高.剪枝一下水过去了. 代码: #include<cstdio> #include<iostream> #include<cstring> #include<vector> using namespace std; struct Edge{ int a,b; }G[35]; int n,m,deg[10],on[10],off[10]; int res; void init(){ memset(deg,0,