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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

校园导航问题文档格式.docx

1、stdlib.hmalloc.h调用自定义函数为 各函数说明void ListInitiate(SeqList *L) /* 初始化顺序表L*/int ListLength(SeqList L) /* 返回顺序表L的当前数据元素个数*/int ListInsert(SeqList *L, int i, DataType x)int ListDelete(SeqList *L, int i, DataType *x)/*删除顺序表L中位置为i(0 = i = size-1)的数据元素并存放到x中*/*删除成功返回1,删除失败返回0*/int ListGet(SeqList L, int i, D

2、ataType *x)/*取顺序表L中第i个数据元素存于x中,成功返回1,失败返回0*/void Dijkstra(AdjMGraph G,int v0,int distance,int path) 最短路径算法/置带权有向图G为空图void GraphInitiate(AdjMGraph *G)/判断顶点vertex是否是有向图G的顶点,是则返回顶点在顶点顺序表中的序号,否则返回-1。int IsVertex(AdjMGraph *G,DataType vertex)/在带权有向图G中插入顶点vertex。如果图中已经有顶点vertex,则图不变void InsertVertex(AdjMG

3、raph *G,DataType vertex)/* 在带权有向图G中插入一条第v1个顶点指向第v2个顶点,权值为weight的有向边。 * 如果v1和v2有一个不是图中的顶点,则图不变;如果v1和v2相等,则图不变。 * 如果图已经包含该边,则边的权值更改为新的权值,时间复杂度:O(1)。 */void InsertEdge(AdjMGraph *G,int v1,int v2,int weight)/判断第v1个顶点到第v2个顶点的边是否是有向图G的边,是则返回1,否则返回0.时间复杂度O(1)。int IsEdge(AdjMGraph *G,int v1,int v2)/* 在带权有向图

4、G中删除一条第v1个顶点指向第v2个顶点的有向边。 * 如果不是图的边,则图不变。时间复杂度:void DeleteEdge(AdjMGraph *G,int v1,int v2)/在带权有向图G中取第v个顶点的第一个邻接顶点,如果这样的邻接顶点存在,则返回该顶点在顶点顺序表的序号,否则返回-1.时间复杂度:O(n)。int GetFirstVex(AdjMGraph G,int v)/创建有向图G,通过在空图G中插入n个顶点和e条边实现。O(n2+e)。void GraphCreat(AdjMGraph *G,DataType v,int n,RowColWeight W,int e)2.3

5、 详细设计 基本数据结构为:typedef struct DataType listMaxSize ; int size ;SeqList;/初始化顺序表 L-size = 0; return L.size;/* 在顺序表L的第i(0 size = MaxSize) printf(顺序表已满无法插入!n); return 0; else if(i size)参数i不合法! else /*为插入做准备*/ for(j = L-size; j i; j-) L-listj = L-listj-1; L-listi = x;size+; /元素个数加1 return 1;size listi; /*

6、保存删除的元素到x中*/ /*依次前移*/ for(j = i+1; j size-1; j+)listj-1 = L-listj;size-; /元素个数减1 if(i L.size-1) *x = L.listi;基本函数为Dijkstra算法 算法具体步骤(1)初始时,S只包含源点,即S=,v的距离为0。U包含除v外的其他顶点,U中顶点u距离为边上的权(若v与u有边)或 )(若u不是v的出边邻接点)。(2)从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。(3)以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u(u U)的距离(经过顶点

7、k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。(4)重复步骤(2)和(3)直到所有顶点都包含在S中三调试分析Dijkstra算法思想为:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将 加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短

8、路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。空间复杂度度Dijkstra 算法的时间复杂度为O(n2) 空间复杂度取决于存储方式,邻接矩阵为O(n2)四用户手册 1.首先选择要进行的操作2选1、2、3、4分别为查询景点信息、问路查询、修改景点信息、退出。3.选1 输入景点代号即可进行信息查询。4.选2 输入两景点代号即可进行问路查询。并输出最短路径长度以及两路径的景点。4.选3 输入景点代号即可进行修改。5选4退出五测试数据及测试结果六源程序清单SeqList.h/邻接矩阵实

9、现图的存储类型定义 SeqList vertices; /存放顶点的顺序表 int edgeMaxVerticesMaxVertices; /存放边的邻接矩阵 int numOfEdges; /边的数目AdjMGraph;/图的结构体定义 int row; /行下标 int col; /列下标 int weight; /权值RowColWeight;/边信息结构体定义struct massages char name20; int num; int cen;massage10=教一楼,50,7,教二楼教三楼主楼图书馆,50,北一楼北二楼北三楼北综北区图书馆,50,7;/置带权有向图G为空图,时

10、间复杂度: int i,j; for(i=0;iMaxVertices;i+) for(j=0;jedgeij=0; else G-edgeij=MaxWeight; /MaxWeight表示权值无穷大 G-numOfEdges=0; /边的条数置为0 ListInitiate(&G-vertices); /顶点顺序表初始化 int i; for (i=0;vertices.size; if(G-vertices.listi=vertex) break; if (i=G-vertices.size) return -1; return i; if(IsVertex(G,vertex)verti

11、ces.size,vertex)=0)/在顶点顺序表的表尾插入顶点vertex printf(插入顶点时空间已满无法插入! exit(1); DataType x; if(v1!=v2) if(ListGet(G-vertices,v1,&x)=0)|(ListGet(G-vertices,v2,&x)=0)插入边时参数v1和v2越界出错! G-edgev1v2=weight;numOfEdges+; if(ListGet(G-x)=0) | (ListGet(G-边的参数v1和v2越界出错! if(G-edgev1v2 = MaxWeight | v1=v2)该边不存在! return 1;

12、 if (IsEdge(G,v1,v2)=0)删除边时出错! exit(1);edgev1v2=MaxWeight;numOfEdges-;/计算带权有向图G中第v个顶点的入度,时间复杂度:int InDegree(AdjMGraph *G,int v) /在此插入你第二步的代码,替换掉下面的语句 int din=0,j; for(j=0;edgevj!=0&=MaxWeight) din+; return din;/计算带权有向图G中第v个顶点的出度,时间复杂度:int OutDegree(AdjMGraph *G,int v) int dou=0,j;edgejv! dou+; retur

13、n dou;/计算带权有向图G中第v个顶点的度,时间复杂度:int Degree(AdjMGraph *G,int v) return(InDegree(G,v)+OutDegree(G,v);/在带权有向图G中删除第v个顶点,时间复杂度:O(n2)。void DeleteVertex(AdjMGraph *G,int v) /在此插入你第一步的代码 int j=0,i; if(v参数v出错! return; for (j=v; for (i=0; G-edgeji=G-edgeji+1; vertices.size-1;edgeij=G-edgei+1j; for(j=v;vertices.

14、listj=G-vertices.listj+1;vertices.size-;DataType x; if(ListGet(G.vertices,v,&x)=0) printf(取第一个邻接顶点时参数v越界出错! exit(1); /寻找邻接矩阵v行中从最左开始第一个值非零且非无穷大的权值对应的顶点 for(col=0;col0 & G.edgevcol G.edgev1colMaxWeight) int i,k; GraphInitiate(G);n; InsertVertex(G,vi); for(k=0;ke;k+) InsertEdge(G,Wk.row,Wk.col,Wk.weight);void Dijkstra(AdjMGraph G,int v0,int distance,int path) int n=G.vertices.size; int *s=(int *)malloc(sizeof(int)*n); int minDis,i,j,u; distancei=G.edgev0i; s

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

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