ImageVerifierCode 换一换
格式:DOCX , 页数:55 ,大小:726.05KB ,
资源ID:28762510      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28762510.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构旅游区导航图课件设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构旅游区导航图课件设计.docx

1、数据结构旅游区导航图课件设计数据结构课程设计报告题 目 旅游区导游图 专 业 计算机科学与技术 班 级 (2)班 学 生 # 13 旅游区导游图题目内容问题描述:设某个旅游区共有n个旅游景点(n10),每个旅游景点都和相邻的m个旅游景点(m2,mvexnum=0 ; G-arcnum=0 ; /* 初始化顶点数、边数 */ return(G) ; ALGraph *Init_ALGraph()/* 图的初始化 */ ALGraph *G; G=(ALGraph *)malloc(sizeof(ALGraph) ; G-vexnum=0 ; G-arcnum=0; /* 初始化顶点数 */ re

2、turn(G) ; 图中顶点定位的函数,判断顶点是否重复输入了int LocateVex(MGraph *G, char vp) /* 图中顶点的定位,若图中有顶点vp,返回其在顶点数组的下标值 */ int k ; for (k=0; kvexnum; k+) if (G-vexsk=vp) return(k) ; return(-1) ; /* 图中无此顶点 */ N N Y Y 往图中增加顶点的函数void AddVertex(MGraph *G, char vp) /* 往图的顶点数组中增加顶点 */ int k, j ; if (G-vexnum=MAXVEX) printf(图中顶

3、点数已达到最多 !n); else if (LocateVex(G, vp)=-1) k=G-vexnum ; G-vexsG-vexnum+=vp ; for (j=0 ; jvexnum ; j+) G-adjjk=INFINITY ; G-adjkj=INFINITY ; /* 是带权的有向图或无向图 */ N Y N Y 往图的邻接矩阵中添加边(弧)void AddArc(MGraph *G , ArcType *arc) /* 往图的邻接矩阵中添加边(弧) */ int k=0, j=0; k=LocateVex(G, arc-vex1) ; j=LocateVex(G, arc-v

4、ex2) ; if (k=-1|j=-1) printf(边或弧的顶点不存在,错误 !n) ; else G-arcnum+ ; G-adjkj=arc-ArcVal ; G-adjjk=arc-ArcVal ; /* 是无向图或带权的无向图,需对称赋值 */ 输出图的顶点矩阵和邻接矩阵void output_graphic(MGraph *G) /* 输出图的顶点矩阵和邻接矩阵 */ int k, j ;printf(图的顶点如下:n) ; for (k=0; kvexnum; k+)printf(%4c,G-vexsk) ;printf(nn) ;printf(图的邻接矩阵如下:n) ;

5、for (k=0; kvexnum; k+) for (j=0; jvexnum; j+)if (G-adjkj=INFINITY) printf(%4s,*) ;else printf(%4d,G-adjkj) ;printf(nn) ; Y N Y N Y以邻接矩阵作为图的存储结构建立图MGraph *create_graph()/* 以邻接矩阵作为图的存储结构建立图 */ char inchar100, enchar100,fvex,lvex ;int count=0;int weight ; MGraph *G;ArcType *arc ;printf(首先进行图的初始化!nn) ;G

6、=(MGraph *)malloc(sizeof(MGraph) ;G=Init_MGraph() ;arc=(ArcType *)malloc(sizeof(ArcType) ; printf(n请以(顶点,顶点,权值)的形式输入图的边(或弧),第一个顶点是?表示结束:n) ; while(1) scanf(%s,inchar) ;fvex=inchar0 ; /* 输入第一个顶点,?结束 */ if (fvex=?) break ; else AddVertex(G, fvex) ; scanf(%s,enchar) ;lvex=enchar0 ;AddVertex(G, lvex) ;

7、scanf(%d,&weight) ; /* 输入第二个顶点和权值 */ arc-vex1=fvex ; arc-vex2=lvex ; arc-ArcVal=weight ; AddArc(G, arc) ; printf(n请继续输入下一条边(或弧)!n) ; return(G) ;将邻接矩阵g转换成邻接表GALGraph *MGraphToALGraph(MGraph *g,ALGraph *G) int i,j,n=g-vexnum; /n为顶点数 ArcNode *p; G=(ALGraph *)malloc(sizeof(ALGraph); G-arcnum = g-arcnum;

8、 G-vexnum = g-vexnum; for(i=0;ivexnum;i+) G-AdjListi.firstarc = NULL; for (i=0;i=0;j-) if (g-adjij!=INFINITY) /邻接矩阵的当前元素不为 p=(ArcNode *)malloc(sizeof(ArcNode); /创建一个结点*p G-AdjListj.data=g-vexsj; p-adjvex = g-vexsj; p-info=g-adjij; p-nextarc=G-AdjListi.firstarc; /将*p链到链表后G-AdjListi.firstarc=p; return

9、 G;邻接链表的输出void output_graphic_c(MGraph *g,ALGraph *G) int i; ArcNode *p; for (i=0;ivexnum;i+) printf(%c,G-AdjListi.data) ; p=G-AdjListi.firstarc; while(p!=NULL) printf(%s,-) ; printf(%c,%d),p-adjvex,p-info) ; p=p-nextarc ; printf(nn); 相邻景点查询并输出void output_Find_ALGraph(ALGraph *G) /* 相邻景点查询并输出 */ int

10、 j; ArcNode *p; printf(请输入你要查询的景点(下标值):n); scanf(%d,&j); p=G-AdjListj.firstarc; while(p) printf(景点%c到景点%c的距离是%d (该两个景点之间有直接的道路相通)n,G-AdjListj.data,p-adjvex,p-info); p=p-nextarc; printf(nn); 景点路线查询:假设对于每个景点,设置有景点路线查询,要求能给出从该景点出发到任一其它景点的最短简单路径及距离。void Dijkstra_One(ALGraph *G, MGraph *g,int v0,int dist

11、ance, int pre) / 带权图G从顶点v0到其他定点的最短距离distance和最短路径前驱结点的下标pre int w; int S30,i,j,k,p,min; printf(你所要开始查询的景点是:%cn,G-AdjListv0.data); for(i=0;ivexnum;i+) distancei=g-adjv0i; Si=0; if(distancei INFINITY) prei=v0; else prei=-1; Sv0=1; /顶点v0已加入到集合S中 for(i=0;ivexnum;i+) min=INFINITY; for(j=0;jvexnum;j+) if(

12、!Sj&distancejmin) min=distancej; k=j; Sk=1; /将找到的顶点加入到集合S中 for(w=0;wvexnum;w+) / /修改集合T中顶点的距离值 if(!Sw&distancewdistancek+g-adjkw) distancew=distancek+g-adjkw; prew=k; printf(查询结果:n); for(j=0;jvexnum;j+) /输出结果 if(prej!=-1) printf(从景点%c到景点%c,G-AdjListv0.data,g-vexsj); p=prej; printf(的最短距离是: %d,distanc

13、ej); printf( 途中经过的景点有:); while(p!=-1) printf( %c,g-vexsp); p=prep; printf(n); else if(j!=v0) printf(n%c到%c : no path,g-vexsj,g-vexsv0); N Y景点路线综合查询:对于该旅游区的任意两个景点,找出它们之间的最短简单路径及距离。void Dijkstra_Two(ALGraph *G, MGraph *g,int v0,int distance, int pre) / 带权图G从顶点v0到其他定点的最短距离distance和最短路径前驱结点的下标pre int w;

14、 int S30,i,j,k,p,min,d; printf(你所要开始查询的开始景点是:%cnn,G-AdjListv0.data); for(i=0;ivexnum;i+) distancei=g-adjv0i; Si=0; if(distancei INFINITY) prei=v0; else prei=-1; Sv0=1; /顶点v0已加入到集合S中 for(i=0;ivexnum;i+) min=INFINITY; for(j=0;jvexnum;j+) if(!Sj&distancejmin) min=distancej; k=j; Sk=1; /将找到的顶点加入到集合S中 fo

15、r(w=0;wvexnum;w+) / /修改集合T中顶点的距离值 if(!Sw&distancewdistancek+g-adjkw) distancew=distancek+g-adjkw; prew=k; printf(输入你要查询的另外一个景点(下标值):); scanf(%d,&d); printf(你要查询的另外一个景点是:%cn,g-vexsd); printf(n查询结果:n); /输出结果 if(pred!=-1) printf(从景点%c到景点%c,G-AdjListv0.data,g-vexsd); p=pred; printf(的最短距离是: %d,distanced)

16、; printf( 途中经过的景点有:); while(p!=-1) printf( %c,g-vexsp); p=prep; printf(n); 最佳旅游路线确定:假设该旅游区的入口也是出口,请确定一条最佳的旅游线路,该线路必须经过所有的旅游景点(有些景点可以重复经过)且走的路最短。void dfs_path(ALGraph *g,int src,int cur,int vis,GPath *cur_path,GPath * min_path) if(vissrc) if(cur_path-count=g-vexnum) if(cur_path-valuevalue) memcpy(min

17、_path,cur_path,sizeof(GPath);/*由cur_path所指内存区域复制sizeof(GPath)个字节到min_path所指内存区域*/ return; return; ArcNode * node =g-AdjListcur.firstarc; for(;node!=NULL; node=node-nextarc)/*起始条件为node =g-AdjListcur.firstarc*/ char adj=node-adjvex; int index=LocateVex(g,adj); if(visindex=0) cur_path-vertexcur_path-co

18、unt+=index; cur_path-value+=node-info; visindex=1; dfs_path(g,src,index,vis,cur_path,min_path); cur_path-count-; cur_path-value-=node-info; visindex=0; Y N N Yvoid best_path(ALGraph *g,int src) int visMAXVEX; memset(vis,0,sizeof(vis); GPath cur_path,min_path; memset(&cur_path,0,sizeof(GPath);/*将cur_

19、path所指向的某一块内存中的每个字节的内容全部设置为0指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向cur_path的指针。*/ memset(&min_path,0,sizeof(GPath);/*将min_path所指向的某一块内存中的每个字节的内容全部设置为0指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向min_path的指针。*/ min_path.value=INFINITY; dfs_path(g,src,src,vis,&cur_path,&min_path);

20、if(min_path.value!=INFINITY) int i=0; printf(n最佳旅游路线景点下标值是:n); for(i=0; i,min_path.vertexi); printf(n); printf(n最佳旅游路线景点是:n); for(i=0; i ,g-AdjListmin_path.vertexi.data); printf(n); else printf(建立的图中没有最佳路径n); 主函数void main() int n, opse,v0,i; int distanceMAXVEX,pre2*MAXVEX,pathMAXVEX; ALGraph *G; MGr

21、aph *M; do printf(nn请选择对图的操作要求:nn); for (n=0; n=30; n+) printf(* ); printf(n* ); printf(1-建立图的邻接矩阵 ); printf( 2-图的邻接矩阵的输出 ); printf( *n); printf(n* ); printf(3-图的邻接链表的输出 ); printf( 4-相邻景点查询 ); printf( *n); printf(n* ); printf(5- 从某点出发到另外所有点最短简单路径及距离 ); printf( *n); printf(n* ); printf(6- 两个景点之间的最短距离(下标值) ); printf( *n); printf(n* ); printf(7- 最佳路径 ); printf(8- 退出 ); printf( *n); for (n=0; n=30; n+) printf(* ); printf(nn); do scanf(%d,&o

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1