【日常学习】【迭代加深搜索】codevs1049 棋盘染色题解

来源:互联网 发布:gfdd数据库 编辑:程序博客网 时间:2024/05/22 14:55

请注明出处 [ametake版权所有]http://blog.csdn.net/ametake欢迎来看

迭代加深什么的本来完全不会,所以代码基本是抄的黄学长的= =hzwer君

感谢里奥同学友情帮助调代码= -=

先上题目吧

题目描述 Description

有一个5×5的棋盘,上面有一些格子被染成了黑色,其他的格子都是白色,你的任务的对棋盘一些格子进行染色,使得所有的黑色格子能连成一块,并且你染色的格子数目要最少。读入一个初始棋盘的状态,输出最少需要对多少个格子进行染色,才能使得所有的黑色格子都连成一块。(注:连接是指上下左右四个方向,如果两个黑色格子只共有一个点,那么不算连接)

输入描述 Input Description

   输入包括一个5×501矩阵,中间无空格,1表示格子已经被染成黑色。

输出描述 Output Description

输出最少需要对多少个格子进行染色

样例输入 Sample Input

11100

11000

10000

01111

11111

样例输出 Sample Output

1

迭代加深就是为了应对BFS空间太大或者各种不可行因素而出现的一种算法,我觉得他更多的是一种思想。原理就是限制搜索的层数,因为结果很有可能在前几层就出现了。如果这一层没有,要搜下一层,还必须从头搜起,因此比较耗时,但由于前几层搜到的可能性很大,相对深搜又节省了不少时间,同时相对广搜还节省了空间,对于状态多又可能在有限步内解决的题目不失为一种好的选择。

框架:http://www.docin.com/p-587407856.html


那么,代码君~基本是黄学长的·1·

限制层数 对于每种方案搜索 然后检验是否能一次把联通的都删除完 如果能说明方案可行,直接退出输出层数。

搜索时为避免重复,采用两个循环,第一个循环是当前层,第二个循环是当前层下面的部分。请参考代码理解



——请君暂上凌烟阁,若个书生万户侯

1 0
原创粉丝点击