jimBFS与DFS解题研究报告.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文档。上传文档
查看更多
个人收集整理 仅供参考学习 个人收集整理 仅供参考学习 PAGE / NUMPAGES 个人收集整理 仅供参考学习 BFS与DFS解题报告 报告人:李锦 题目简介: 1002 Hdu 1983 1003 Hdu 1428 1004 Hdu 2918 第一题难度较大,暂时不用考虑去做 小结: 题目分析与源码 1002 题目描述: Problem Description 破解字迷之后,你得知Kid将会在展览开始后T分钟内盗取至少一颗宝石,并离开展馆.整个展馆呈矩形分布,划分为N*M个区域,有唯一地入口和出口(不能从出口进入,同样不能从入口出去).由某个区域可直接移动至相邻四个区域中地一个,且最快需要一分钟.假设Kid进入放有宝石地区域即可盗取宝石,无需耗时.问至少要封锁几个区域(可以封锁放有宝石地区域,但不能封锁入口和出口)才能保证Kid无法完成任务.b5E2RGbCAP Input 输入地第一行有一个整数C,代表有C组测试数据.每组测试数据地第一行有三个整数N,M,T(2=N,M=8,T0).接下来N行M列为展馆布置图,其中包括: S:入口 E:出口 J:放有宝石地区域,至少出现一次 .:空白区域 #:墙p1EanqFDPw Output 对每组测试数据,输出至少要封锁地区域数. Sample Input 2 5 5 5 SJJJJ ..##J .JJJJ .J... EJ... 5 5 6 SJJJJ ..##J .JJJJ .J... EJ... Sample Output 思路分析: 封锁出口或者入口周围地格子. 最多需要4个封锁点. 所以我们可以采取这样地策略: 1.寻找一条盗贼地可行路线,如果没有,返回0. 2.计算封锁出口和入口四周需要地封锁点数量,取小地一个,假设是k,k =4 3.从少到多,遍历所有封锁点个数小于k地方案,验证是否是一条有效地覆盖方案 (可以通过是否阻止了1中地盗贼线路进行快速验证). 如果有有效覆盖方案,返回这个方案地覆盖点值,否则继续. 4.如果没有比k小地覆盖方案,返回k. 时间复杂度: 最多(M*N)^3次有效覆盖验证.即(8*8)^3=256k次.其中有很大一部分可以通过快速验证排除(取决于1地路径长短,所以一般1应该求出最短路径地可行路线)DXDiTa9E3d C++代码 #include iostream #include queue #include string using namespace std; int n,m,t,ans; int dir[4][2] = {1,0,-1,0,0,-1,0,1}; char map[10][10]; bool vis[2][10][10]; struct node { int x,y,t,k; int rox[64],roy[64]; }; node start,end,temp,in; queue node Q; void dfs(int deep) { if(deep ans) return ; int i,j,minstep = -1; node q; while(!Q.empty())//清空队列 Q.pop(); Q.push(start);//起始位置入队 memset(vis,false,sizeof(vis));//初始化标记数组 vis[0][start.x][start.y] = true;//标记起始点为真 while(!Q.empty())//从起点开始寻找一条路径 { q = Q.front(); Q.pop(); if(q.t t) continue; if(q.k map[q.x][q.y] == E)//找到出口 { minstep = q.t; break; } for(i = 0;i 4;i++)//分别从四个方向开始扫描 { int xx = q.x + dir[i][0]; int yy = q.y + dir[i][1]; if(xx 0 || xx = n || yy 0 || yy = m || map[xx][yy] == #)RTCrpUDGiT continue;//越界或碰到墙 if(map[xx][yy] == J) in.k = 1;//碰到珠宝

文档评论(0)

ipad0c + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档