




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实 验 报 告 4一、实验目的:掌握深度优先搜索求解算法的基本思想。二、实验要求:用C语言实现城市交通图的代价树深度优先搜索求解三、实验语言环境:C语言四、设计思路:解法:采用 代价树的深度优先搜索理论: 1. 首先根据交通图,画出代价图代价图 2. 开始搜索 open表存放刚刚生成的节点。 closed表存放将要扩展的节点或已经扩展过的节点。背景:如图是5城市之间交通路线图,A城市是出发地,E城市是目的地,两城市间的交通费用(代价)如图中数字所示,求从A到E的最小费用路线。 解法:采用 代价树的广度优先搜索 理论: 1. 首先根据交通图,画出代价图 代价图 如图 2. 开始搜索 oepn表存放刚刚生成的节点。 closed表存放将要扩展的节点或已经扩展过的节点。 open表结构: 代价|节点|父节点 closed表结构: 序号|节点|父节点 1) 把A放入 open表 open表: 0| A | 0 Closed表: 空 2) 把A从open表放入closed表 open表: 空 closed表: 1 | A | 0 3) 扩展A,得C1,B1,放入open表 C1的代价:3 B1的代价:4 Open表: 3 | C1 | A 4 | B1 | A closed表: 1 | A | 0 4 | B1 | A closed表: 1 | A | 0 2 | C1 | A C1不是目标节点,于是继续扩展 5) 把C1扩展得到 D1,放入open表 D1的代价:3+2=5 B1的代价:4 open表: 4 | B1 | A 5 | D1 | C1 closed表: 1 | A | 0 2 | C1 | A 6) 把B1从open放入closed表 open表: 5 | D1 | C1 closed表: 1 | A | 0 2 | C1 | A 3 | B1 | A B1不是目标节点,于是继续扩展 7) 扩展B1得D2,E1,放入Open表 D2的代价:4+4=8 E1的代价:4+5=9 open表: 5 | D1 | C1 8 | D2 | B1 9 | E1 | B1 closed表: 1 | A | 0 2 | C1 | A 3 | B1 | A 8) 把D1从open表放入closed表 open表: 8 | D2 | B1 9 | E1 | B1 closed表: 1 | A | 0 2 | C1 | A 3 | B1 | A 4 | D1 | C1 D1不是目标节点,于是继续扩展 9) 把D1扩展得到E2,B2,放入open表 E2的代价:3+2+3=8 B2的代价:3+2+4=9 D2的代价:8 E1的代价:9 open表: 8 | E2 | D1 8 | D2 | B1 9 | B2 | D1 9 | E1 | B1 closed表: 1 | A | 0 2 | C1 | A 3 | B1 | A 4 | D1 | C1 10) 把E2从open表放入closed表 open表: 8 | D2 | B1 9 | B2 | D1 9 | E1 | B1 closed表: 1 | A | 0 2 | C1 | A 3 | B1 | A 4 | D1 | C1 5 | E2 | D1 E2 是目标节点,搜索结束。 则搜索路径 A - C1 - D1 -E2 即:A - C - D - E 五、实验代码:#include #include #define INF 32767 /*INF表示*/typedef int InfoType;typedef char Vertex;#defineMAXV 6 /*最大顶点个数*/*以下定义邻接矩阵类型*/typedef struct /*图的定义*/ InfoType edgesMAXVMAXV; /*邻接矩阵*/ int n,e; /*顶点数,弧数*/Vertex vexsMAXV; /*存放顶点信息*/ MGraph;/*图的邻接矩阵类型*/*以下定义邻接表类型*/typedef struct ANode /*弧的结点结构类型*/int adjvex; /*该弧的终点位置*/ struct ANode *nextarc; /*指向下一条弧的指针*/ InfoType info; /*该弧的相关信息,这里用于存放权值*/ ArcNode;typedef struct Vnode /*邻接表头结点的类型*/Vertex data; /*顶点信息*/ ArcNode *firstarc; /*指向第一条弧*/ VNode;typedef VNode AdjListMAXV;/*AdjList是邻接表类型*/typedef struct AdjList adjlist; /*邻接表*/ int n,e; /*图中顶点数n和边数e*/ ALGraph; /*图的邻接表类型*/typedef struct char vi,vj; int info;etype;typedef struct CLOSEDListint id; /记住矢量int datan;int cost;int dad;/记住父节点 回溯用closed; /open表和close表都用这个类型void MatToList(MGraph g,ALGraph *&G)/*将邻接矩阵g转换成邻接表G*/int i,j,n=g.n;ArcNode *p;G=(ALGraph *)malloc(sizeof(ALGraph);for (i=0;iadjlisti.firstarc=NULL;G-adjlisti.data=g.vexsi;for (i=0;i=0;j-)if (g.edgesij!=INF) p=(ArcNode *)malloc(sizeof(ArcNode);p-adjvex=j;p-info=g.edgesij;p-nextarc=G-adjlisti.firstarc;G-adjlisti.firstarc=p;G-n=n;G-e=g.e;void ListToMat(ALGraph *G,MGraph &g)/*将邻接表G转换成邻接矩阵g*/int i,j,n=G-n;ArcNode *p;for(i=0;in;i+)for(j=0;jn;j+)g.edgesij=INF;for (i=0;iadjlisti.data;p=G-adjlisti.firstarc; while (p!=NULL) g.edgesip-adjvex=p-info; p=p-nextarc;g.n=n;g.e=G-e;void DispMat(MGraph g)/*输出邻接矩阵g*/int i,j;for (i=0;ig.n;i+)for (j=0;jg.n;j+)if (g.edgesij=INF)printf(%3s,);elseprintf(%3d,g.edgesij);printf(n);void DispAdj(ALGraph *G)/*输出邻接表G*/int i;ArcNode *p;for (i=0;in;i+)p=G-adjlisti.firstarc; printf(n%3d %c : ,i,G-adjlisti.data );while (p!=NULL)printf(-%d(%d),p-adjvex,p-info);p=p-nextarc;printf(n);void creatmat(MGraph &g,char vex,int n,etype edge,int e)/建立邻接矩阵g.n=n;g.e=e; int k,i,j;for(k=0;kn;k+) g.vexsk=vexk; for(i=0;in;i+)for(j=0;jn;j+)g.edgesij=INF;for(k=0;kn=n;G-e=e;int k,i,j;for (i=0;iadjlisti.firstarc=NULL;G-adjlisti.data=vexi;for(k=0;kadjlisti.data !=edgek.vi) i+; j=0; while(G-adjlistj.data !=edgek.vj) j+; p=(ArcNode *)malloc(sizeof(ArcNode); p-adjvex=j; p-info=; p-nextarc=G-adjlisti.firstarc; G-adjlisti.firstarc=p; p=(ArcNode *)malloc(sizeof(ArcNode); p-adjvex=i; p-info=; p-nextarc=G-adjlistj.firstarc; G-adjlistj.firstarc=p;/char dfsv10;char bfsv10;int k;int visited10;/*void DFS(ALGraph *G,int v)/深度优先遍历 ArcNode *p; int w; dfsvk=G-adjlistv.data;k+; visitedv=1; p=G-adjlistv.firstarc; while(p!=NULL) w=p-adjvex; if(visitedw=0) DFS(G,w); p=p-nextarc; */*void BFS(ALGraph *G,int v,int dest) /广度优先搜索,v是出发结点序号,dest是目标节点序号closed op20;/定义open表大小closed cl20; /定义closed表大小 int front,rear; /定义指针 int crear=-1; int cost=0; /定义费用变量 ArcNode *p; front=rear=-1; k=0; rear+; oprear.id=0; oprear.datan=0; oprear.cost=0; oprear.dad=-1; while(frontadjlistii.data;ii=clii.dad;to+;for(int j=to-1;j=0;j-)printf(%c-,toprtj);printf(%cn,G-adjlistclcrear.datan.data);/printf(Least cost: %dnn,clcrear.cost);return;p=(ArcNode *)malloc(sizeof(ArcNode); p=G-adjlistclcrear.datan.firstarc; /first tobe 扩展结点 while(p!=NULL) /若不是目标节点,则对其扩展,并将扩展结果放入open表表尾部 rear+;oprear.id=rear; /open新节点位置oprear.dad=crear; /记录父节点在close表中的位置,方便后来回溯oprear.datan=p-adjvex; /是哪个字符,即位置oprear.cost=clcrear.cost+p-info;/计算费用p=p-nextarc; int i=rear,j;bool exchange=true; /将open表在所有待扩展范围内全排序,代价小的在上面。排序方法:冒泡closed temp;while(exchange) exchange=false; for(j=front+1;ji;j+) if( opj.costopj.cost) temp=opj+1;opj+1=opj;opj=temp;exchange=true; i-; /*/以下为主函数;void main()MGraph g;char vex=abcde; etype edge=a,b,4, a,c,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 4669-2:2025 EN Document management - Information classification,marking and handling - Part 2: Functional and technical requirements for ICMH solutions
- 【正版授权】 ISO 7207-2:2025 EN Implants for surgery - Components for partial and total knee joint prostheses - Part 2: Articulating surfaces made of metal,ceramic and plastics material
- 【正版授权】 ISO 15638-23:2025 EN Intelligent transport systems - Framework for collaborative telematics applications for regulated commercial freight vehicles (TARV) - Part 23: Tyre pre
- 【正版授权】 ISO 1014-3:2025 EN Coke - Part 3: Determination of porosity
- 【正版授权】 IEC 60888:1987 FR-D Zinc-coated steel wires for stranded conductors
- 【正版授权】 IEC 60404-1:2016+AMD1:2025 CSV EN Magnetic materials - Part 1: Classification
- 【正版授权】 IEC 60245-5:1994 EN-D Rubber insulated cables - Rated voltages up to and including 450/750 V - Part 5: Lift cables
- 雀巢产品面试题及答案
- 村计生考试题及答案
- 计量基础考试题及答案
- 建筑公司分包合同管理办法
- 2025至2030苏打水行业发展趋势分析与未来投资战略咨询研究报告
- 2025年秋季学期德育工作计划:向下扎根向上开花
- 附着式钢管抱杆铁塔组立施工方案
- 工贸企业重大事故隐患判定标准培训PPT
- (完整word版)身份证号码前6位表示的地区对照表
- 高中生物的学习方法
- GE彩超Logiq操作手册培训课件
- 罐头食品工艺
- 混凝土外加剂检测原始记录表
- GB/T 15670-1995农药登记毒理学试验方法
评论
0/150
提交评论