图的应用(附代码).doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图的应用(附代码)

一、【实验构思(Conceive)】(10%) (本部分)Design)】(20%) (本部分) 三、【实现描述(Implement)】(30%) (本部分Testing)】(10%) (本部分) (本部分)(本部分)#includestdio.h #includestring.h #define MAXV 20 #define MAXSIZE 20 #define MAXLEN 500 #define INF 32767/*用32767表示∞*/ int a=0; typedef struct {int num; char name[MAXSIZE]; char content[MAXLEN]; }VertexType; typedef struct {int edges[MAXV][MAXV]; int vexnum,arcnum; VertexType vexs[MAXV]; }MGraph; int visited[MAXV]; int p[MAXV]; void path(MGraph g,int i,int j,int k) /*确定路径上第k+1个顶点的序号*/ {int s; if(p[k]==j)/*找到一条路径*/ { a++;/*路径的条数值加1*/ printf(第%d条:\n,a); for(s=0;s=k-1;s++)/*输出一条路径*/ printf(%s-,g.vexs[p[s]].name); printf(\n); } s=0; while(sg.vexnum) {if(s!=i)/*保证找到的是简单路径*/ {if(g.edges[p[k]][s]!=INFvisited[s]==0) /*当vk与vs之间有边存在且vs未被访问过*/ {visited[s]=1;/*置访问标志位为1,即已访问的*/ p[k+1]=s;/*将顶点s加入到p数组中*/ path(g,i,j,k+1); visited[s]=0;/*重置访问标志位为0,以便该顶点能被重新使用*/ }} s++; } } void disppath(MGraph g,int i,int j) {int k; p[0]=i; for(k=0;kg.vexnum;k++) visited[i]=0;/*初始化各顶点的访问标志位*/ a=0;/*初始化路径的条数*/ path(g,i,j,0);/*通过调用path函数,找到从vi到vj的所有路径并输出*/ } void ppath(MGraph g,int path1[],int i,int v0) {int k; k=path1[i]; if(k==v0)/*找到最短路径,则返回*/ return; ppath(g,path1,k,v0);/*否则,递归调用之*/ printf(%s-,g.vexs[k].name);/*依次输出路径中的景点名称*/ } void dispath(MGraph g,int dist[],int path1[],int s[],int n,int v0,int i) { if(s[i]==1i!=v0) /*当v0不等于i,且i∈s*/ {printf(从%s到%s的最短游览路径是:\n,g.vexs[v0].name,g.vexs[i].name); printf(%s-,g.vexs[v0].name); ppath(g,path1,i,v0);/*调用ppath函数,输出路径中的顶点*/ printf(%s ,g.vexs[i].name); printf(路径长度:%d米\n,dist[i]); } } void Dijkstra(MGraph g,int v0,int p) { int dist[MAXV],path1[MAXV]; int s[MAXV]; int mindis,i,j,u,n=g.vexnum; for(i=0;in;i++) {dist[i]=g.edges[v0][i];/*距离初始化*/ s[i]=0;/*s[]置空*/ if(g.edges[v0][i]INF)/*路径初始化*/ path1[i]=v0; else path1[i]=-1; } s[v0]=1;path1[v0]=0;/*源点编号v0放入s中*/ for(i=0;in;i++) {mindis=INF; u=-1; for(j=0;jn;j++)/*选取不在s中具有最小距离的顶点u*/ if(s[j]==0dist[j]mindis) {u=j;

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档