4 鸣人和佐助实验报告.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文档。上传文档
查看更多
北京科技大学实验报告 学院:经济管理学院 专业:金融工程 班级: 金融201 姓名:万世文 学号 实验日期:2021 年 10月 19日 实验名称 上机实验4-鸣人与佐助 实验目的 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置。地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸的手下才能到这些位置。鸣人有一定数量的查克拉,每一个单位的查克拉可以打败一个大蛇丸的手下。假设鸣人可以往上下左右四个方向移动,每移动一个距离需要花费1个单位时间,打败大蛇丸的手下不需要时间。如果鸣人查克拉消耗完了,则只可以走到没有大蛇丸手下的位置,不可以再移动到有大蛇丸手下的位置。佐助在此期间不移动,大蛇丸的手下也不移动。请问,鸣人要追上佐助最少需要花费多少时间? 实验环境 计蒜客 C++11 实验原理 搜索算法 实验内容与步骤 问题分析 和华为云的实验一样,使用搜索算法即可解决。 算法设计 起点入队 while(队列不为空) 队中取数据t 若t为终点,则结束 向周围4个方向移动 若还有查克拉,则该点入队 没有找到,输出-1 算法流程图 开始 开始 输入数据 输入数据 起点入队 起点入队 从队中取一个元素 从队中取一个元素 到达目的地地 到达目的地地 是 是 否 否 向一个方向移动 向一个方向移动 查克拉是否够 查克拉是否够 否 否 是 是 点入队 点入队 是否遍历完4个方向 是否遍历完4个方向 是 是 否 否 否队列为空 否 队列为空 是 是 没有找到输出-1输出结果 没有找到输出-1 输出结果 结束 结束 算法实现 #includecstdio #define len 50000 using namespace std; char c; int ans,m,n,map[210][210],state[210][210][20],pre[len],I[len],J[len],K[len],X,Y,fi,fj,head,tail,i,j,di[5]={1,-1},dj[5]={0,0,1,-1}; void solve(int x) { if(x) { ans++; solve(pre[x]); } } int main() { scanf(%d%d%d,m,n,K[1]); for(i=1;i=m;++i) { for(j=1;j=n;++j) { scanf( %c,c); switch(c) { case +:fi=i,fj=j;break; case @:I[1]=i,J[1]=j,state[i][j][1]=1; case #:map[i][j]=1;break; default:break; } } } head=0,tail=1,pre[1]=0; while(head!=tail) { head++; for(i=0;i4;++i) { X=di[i]+I[head],Y=dj[i]+J[head]; if(!state[X][Y][K[head]-map[X][Y]]K[head]-map[X][Y]=0X=1X=mY=1Y=n) { tail++; pre[tail]=head; I[tail]=X,J[tail]=Y; K[tail]=K[head]-map[X][Y]; state[X][Y][K[tail]]=1; if(X==fiY==fj) { solve(pre[tail]); printf(%d,ans); return 0; }

文档评论(0)

189****7346 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档