版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上算法设计与分析实验报告实验四 分治限界法报告书姓名指导教师学号日 期班级实验内容1. 迷宫最短路径在下图中,请使用广度搜索求出a到b的最短路径,有色区域为不可通过区域。2. 树上最短路径dashen是个牛人。很多人都想认识dashen,但没有这个机会,于是shen粉们便想了一个方法,计算自己与dashen的ACM距离,因此很多人都去参加ACM,而ACM因此也改名为ACM国际水赛。每个ACM有n个组,每组3个人。同组的3个人都是队友。大家都想知道自己与dashen的最小距离是多少。dashen与自己的最小距离当然是0。dashen的队友和dashen的最小距离是1。da
2、shen的队友的队友和dashen的最小距离是2以此类推。如果实在和dashen没有关系的只好输出undefined了。第一行读入n。表示有n个组。1 n 100接下来n行,每行有3个名字,名字之间用空格隔开。每个名字的开头都是大写的。每行输出一个名字,名字后面空格后输出数字a或者字符串undefined,a代表最小距离。名字按字典序输出。Sample Input7dashen Oparin ToropovAyzenshteyn Oparin SamsonovAyzenshteyn Chevdar SamsonovFominykh dashen OparinDublennykh Fominyk
3、h IvankovBurmistrov Dublennykh KurpilyanskiyCormen Leiserson RivestSample OutputAyzenshteyn 2Burmistrov 3Chevdar 3Cormen undefinedDublennykh 2Fominykh 1dashen 0Ivankov 2Kurpilyanskiy 3Leiserson undefinedOparin 1Rivest undefinedSamsonov 2Toropov 1实验目的1)掌握学习什么是分支界限法。2)掌握学习BFS(宽度优先搜索)的思想过程以及编码实现。3)掌握学习
4、简单的BFS题目如何去思考并解决实施。4)学习培养基础的快速变成能力、独立思考恩能够立与解决bug的能力。实验过程和步骤1. 迷宫最短路径1.2 解题思路 迷宫搜索最短路径,主要考察的就是最简单裸的BFS。BFS只要掌握如何标记好数组、边界的考虑、出队进队就好了。 如何保存搜索的层数?每一次节点扩散层,标记的层数值都是当前层的+1 即可。 至于写BFS的写法。步骤都是一样的:放第一个进队,然后出队、扩散开进队并标记、出队.循环下去直到队空。写法太基础就不讲解了。1.2 测试样例73 24 6.#.#.#.#.#.#.#.#.1.3 程序运行情况1.4 程序源码(含注释)#include&quo
5、t;bits/stdc+.h"using namespace std;#define inf 999int n;/行数int sx,sy;/起点int gx,gy;/终点char einfinf;/地图int bookinfinf;/标记地图int pos42=-1,0,1,0,0,1,0,-1;/方位,上下右左void read()/输入数据 printf("input the row of the map:"); scanf("%d",&n); printf("now input the point:n"); s
6、canf("%d%d%d%d",&sx,&sy,&gx,&gy);/输入下标自1开始 sx-;/计算下标从0开始 sy-; gx-; gy-; printf("input the map now:n"); for(int i=0;i<n;i+) scanf("%s",ei); printf("n"); memset(book,0,sizeof book);/初始化struct Node /节点 int x,y; Node(int i,int j):x(i),y(j) ;bool
7、 islegal(int x,int y)/判断是否合法 if(x<0|x>=n|y<0|y>=n)return false; return true;void bfs()/方便快捷 queue<Node>q; while(!q.empty()q.pop();/初始化 q.push(Node(sx,sy);/放入首节点 booksxsy=0;/标记 while(!q.empty() Node t=q.front(); q.pop();/取出节点 int tag=bookt.xt.y; if(t.x=gx&&t.y=gy)break;/提前结束
8、 for(int i=0;i<4;i+) int x=t.x+posi0; int y=t.y+posi1; if(islegal(x,y)&&exy='.'&&!bookxy)/放入 未越界、可走、未走过的 q.push(Node(x,y); bookxy=tag+1; void output() printf("-n"); int i,j; for(i=0;i<n;i+) for(j=0;j<n;j+) printf("%d ",bookij); printf("n"
9、;); int main() read();/输入 bfs(); output();/输出 return 0;2树上最短路径2.1 解题思路 问题问每个人和dashen 的距离,组员的距离为1。也就是说,人与人之间的距离都是通过“组员”来不断量化的。那么可以想到,组员之间可以画一条边,问题问的整个人际之间的图建好之后,将人看为节点,求出每个节点与某个定点的最短距离。这个图的遍历+定点最短距离问题显然用BFS很好解决。 问题的难点:1) 映射字符串到id的关系,我用的是STL的map容器解决。2) 保存点之间边的关系,本来用的是矩阵保存,但是写到后来很麻烦,就用邻接表保存3) 输出的时候有点麻烦
10、2.2 测试样例7dashen Oparin ToropovAyzenshteyn Oparin SamsonovAyzenshteyn Chevdar SamsonovFominykh dashen OparinDublennykh Fominykh IvankovBurmistrov Dublennykh KurpilyanskiyCormen Leiserson Rivest2.3 程序运行情况2.4 程序源码(含注释)#include"bits/stdc+.h"using namespace std;#define inf 999#define INF int n,
11、num;/行数,以及不重复人数int origin;/ 起点,即dashen 的标号int bookinf;/标记vector<int>edgeinf;/每个点的边集struct Student/学生类,下标自1始 string name; int id; int rank; void set(string s,int i) name=s; id=i; rank=INF;/所有人的距离默认无穷大 bool operator<(const Student& t)const name<; studentinf;void read()/输入数据 num=0
12、;/人数初始化 memset(book,0,sizeof book);/初始化标记 cout<<"input the num of the groups:" cin>>n; cout<<"now input the each group mates:n" map<string,int>m; m.clear(); string s3;/临时存放 for(int i=0;i<n;i+) for(int j=0;j<3;j+)/读入点,建点 cin>>sj; if(msj=0)/没出现过就
13、赋予标号以及存储名字 msj=+num; studentnum.set(sj,num);/存储此人id和名字 if(sj="dashen") origin=msj; for(int j=0;j<2;j+) /建图 for(int k=j+1;k<3;k+) int a=msj; int b=msk; edgea.push_back(b);/加入边集 edgeb.push_back(a); printf("n");void bfs()/根据id进行bfs queue<int>q; while(!q.empty()q.pop();/初
14、始化 q.push(origin);/放入首节点 bookorigin=1;/标记走过 studentorigin.rank=0;/dashen是0 while(!q.empty() int v=q.front(); q.pop();/取出节点 int len=edgev.size(); for(int i=0;i<len;i+) int u=edgevi; studentu.rank=min(studentv.rank+1,studentu.rank); if(!booku) q.push(u); booku=1; void output() printf("-n"); int i; sort(student+1,student+num+1);/排序 for(i=1;i<=num;i+) cout<<st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026-2027学年初中心理健康九年级下册北师大版(2021)第十课 承担社会责任课时小考卷
- 2026中国网络游戏角色行业市场深度调研及发展趋势与投资价值评估研究报告
- 2026年机修钳工(中级)模拟试卷及参考答案
- 2026年商法在线模拟试卷及答案
- 第1部分 模块5 主题4 殖民地人民的反抗与资本主义制度的扩展
- 2026年低级电工模拟试卷(含答案)
- 2026年茶艺师(高级)证考试模拟试卷带答案
- 2026年初级维修电工布线模拟试题(含答案)
- 2026年中小学信息技术课程设计模拟试卷及参考答案
- 2026年教育技术学导论模拟试卷及参考答案
- 2026年新疆新业国有资产经营集团有限责任公司人员招聘笔试参考题库及详细答案解析
- 大体积混凝土冷却水管安装施工工艺
- 2026年仓库安全培训考试题及答案
- 2026年上海市中考真题历史试题【含答案解析】
- 中国石油天然气股份有限公司辽宁盘锦销售分公司大洼新开加油站项目水土保持方案报告表
- 邮政相关基础知识考试题库及答案2025年
- 变电所分列运行管理制度培训课件
- 肥料登记证申请办理流程
- 《新能源专业导论》新能源相关专业全套教学课件
- 2026航天科工十院校园招聘笔试历年难易错考点试卷带答案解析
- 陕煤电力略阳有限公司招聘笔试题库2026
评论
0/150
提交评论