关于WFS+DP的一点浅谈【信息技术】.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于WFS+DP的一点浅谈 四川绵阳中学 真圣灵骑士 (大家好:!这是我的第一篇试探性论文,有不足之处请牛牛们指点教诲,谢谢) [*注意:我一直把BFS=WFS,个人爱好,请包涵,谢谢] 学习了WFS很久了,经典的例题也做了不少(还是没有牛牛们多呀……),WFS也有许多优化技巧,应用变式,比如双广,哈稀,A*等等。但是我最近做了2个题目却让我觉得,好象WFS又有了一种新的算法组合:WFS+DP。 DP很熟悉了,其实就是个递推的过程,找到数据之间的关系,有线形DP(如最长不下降子串),树形DP(简单的有合并沙堆,难的有苹果树,选课),还有图形的DP,一般来说遍历问题就是个图形DP。我今天说的WFS+DP其实本质上就是个图形DP,不过在遍历,路径问题的基础上加难了点(至少我觉得)。 何谓WFS+DP呢?DP我姑且把他当作是递推的过程吧,也就是利用状态指针来在图上进行操作。对于任意一个图上的起点,我们在某个状态时候,有许多种决策,比如走迷宫就是:有上下左右的决策,而如果我们需要求最优解,就需要去判断是否为最优解,如果完全的是一个WFS,那么对于走选择了某个决策,这个性状态要保存下来,而以后再吧它当作OPEN表开始扩展,结点的重复很多。所以我就想到了用DP,也就是说,对于选择了一个决策后,我们要看它是不是到那个点上最优的策略,只有最优的策略我才保存,这样就避免了许多重复的结点,也就是说对于一个N*M的图,我最多就保存了N*M个状态,而避免了对同一个点多次的保存。 还是举2个例题来说明一下好了: 超级龙骑 (选自COI2005) 时间限制:1S 空间限制:32M 文件名:dragon.pas 输入文件:dragon.in 输出文件:dragon.out 语言:freepascal/C++/C 【题目描述】 当所有人终于费力的将狗狗排成一条直线之后,抽筋流高手又布置了另一个任务。他让每个人操作一个可爱的超级龙骑,找寻一条最短了路径去毁掉一个特殊的建筑物(Crystal’s Love——简称CL)。 这个龙骑之所以叫做超级龙骑,是因为他的射程为无穷大。然而,这种龙骑却只能打上,下,左,右,左上,右上,左下,右下八个方向,而且这种龙骑的攻击不可穿墙。即是说如果他攻击的目标在墙后(如图): 龙骑————————————墙————————目标 那么这个目标就无法被攻击到。 现在给出一张N*M(2 =n,m =40)的地图,然后给出龙骑的初始位置(X1,Y1),再给出CL的位置(X2,Y2)。假设龙骑移动一步需要单位1的时间。龙骑发炮需要的时间 0.000000000001,即是说龙骑消灭CL不需要时间。 现在请你求出最少需用多少时间才能消灭CL。 【输入数据】 每组数据第一行为2个数N,M表示矩阵的规模(N为高,M为宽). 接下来是N*M的矩阵,O表示空地,X表示障碍物. 最后是多对数据分别是目标坐标及我方步兵的坐标(显然不可能在障碍物上),每对占一行,0为结束标志. 【输出数据】 能到达能打击到目标的位置的最短步数(显然若能直接打到则时间为0),若没有这样的位置存在则输出Impossible!. 【样例输入】 3 4 OXXO XXOO XOOO 3 2 2 4 3 3 1 1 0 0 0 0 【样例输出】 1 Impossible! 【数据范围】 对于30%的数据,有N*M =100 对于50%的数据,有N*M =400 对于100%的数据,有N*m =1600 出题人:Snake.ZDWY 分析: 这个题目转化一下,就变成了兵A可以走上下左右方向,每次1步,问它至少要多少步才可以到达指定的标记的点,标记点可以看成直接是由目标向8个方向发射的一条射线,只要没有障碍挡,这条线上的点都是标记点(因为这个是个相对的过程,要龙骑打到目标那么目标也一定看得见龙骑)。 那么我们不妨把图转化一下: 对于可行点,标记0;障碍,标记255;目标可控点,标记2;龙骑经过过的点,标记1。 当某个1点和2点可以重合时候,就找到解了。 而我们开始的时候,龙骑有个点,那么把这个点压如队,开始WFS对这个点拓展:明显是4个方向(只要没有障碍),这样我们就又得到一些新的状态。我们下一次又要对这些新的结点进行拓展……不停地重复这个过程,当队满或者找到解的时候弹出。但是这样的效率很低的,因为又许多不可能得到最优解的点我们拓展了,举个例子说吧: 4 5 OOOOO OXXOO OOXXO OXOOO 3 2 1 5 0 0 0 0 经过初始标记,图成了: 0 0 0 0 1 2 255 255 0 0 2 2 255 255 0 2 255 0 0 0 那么我们第一次拓展的点(注意:状态变量中只保存指针,即X,Y的坐

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档