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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

图的基本操作.docx

1、图的基本操作实验七:图的基本操作(1)键盘输入数据,建立一个有向图的邻接表。(2)输出该邻接表。(3)在有向图的邻接表的基础上计算各顶点的度,并输出。(4)以有向图的邻接表为基础实现输出它的拓扑排序序列。(5)采用邻接表存储实现无向图的深度优先遍历。(6)采用邻接表存储实现无向图的广度优先遍历。(7)采用邻接矩阵存储实现无向图的最小生成树的PRIM算法。(8)采用邻接矩阵存储一个有向图,输出单源点到其它顶点的最短路径。(9)在主函数中设计一个简单的菜单,分别调试上述算法。综合训练:为计算机专业设计教学计划:4个学年,每学年2个学期,开设50门课程,每学期所开课程门数尽量均衡,课程的安排必须满足

2、先修关系。#include#include#include#includeusing namespace std;#define max_vertex_num 20#define INFINITY 1000000000typedef struct ArcNode int adjvex; struct ArcNode *nextarc;ArcNode;typedef char vertexType;typedef struct VNode vertexType data; ArcNode *firstarc; int count;VNode,AdjListmax_vertex_num;typed

3、ef struct AdjList vertices; int vexnum,arcnum; int degree;ALGraph;/邻接表typedef struct ArcCell int adj;ArcCell,AdjMatrixmax_vertex_nummax_vertex_num;typedef struct char vexmax_vertex_num; AdjMatrix arc; int vexnum,arcnum;MGraph;/邻接矩阵ALGraph ALG,InsertALG,UALG;MGraph G;int visitmax_vertex_num;struct ed

4、ge char adjvex; int lowcost;closedgemax_vertex_num;int Pmax_vertex_num;int Dmax_vertex_num;int finialmax_vertex_num;void print() printf((1)键盘输入数据,建立一个有向图的邻接表n); printf((2)输出该邻接表n); printf((3)在有向图的邻接表的基础上计算各顶点的度,并输出n); printf((4)以有向图的邻接表为基础实现输出它的拓扑排序序列n); printf((5)采用邻接表存储实现无向图的深度优先遍历n); printf((6)采用

5、邻接表存储实现无向图的广度优先遍历n); printf((7)采用邻接矩阵存储实现无向图的最小生成树的PRIM算法n); printf((8)采用邻接矩阵存储一个有向图,输出单源点到其它顶点的最短路径n); printf((0)退出程序n); int locatevex(MGraph G,char v)/查找顶点在图中的位置 int i=0; while(iG.vexnum) if(v=G.vexi) break; else i+; return i;void CreateALGraph(ALGraph &ALG,ALGraph &InsertALG)/创建有向邻接表及其逆邻接表并且其顶点用大

6、写字母表示 int i,j,k; ArcNode *s,*r; printf(请输入有向邻接表的顶点数和边数:n); scanf(%d%d,&ALG.vexnum,&ALG.arcnum); for(i=0;iALG.vexnum;i+) ALG.verticesi.data=A+i; ALG.verticesi.firstarc=NULL; InsertALG.verticesi.data=A+i; InsertALG.verticesi.firstarc=NULL; for(k=0;kadjvex=j; s-nextarc=ALG.verticesi.firstarc; ALG.verti

7、cesi.firstarc=s; r-adjvex=i; r-nextarc=InsertALG.verticesj.firstarc; InsertALG.verticesj.firstarc=r; void CeratUALGraph(ALGraph &UALG)/用头插法建立无向邻接表 int i,j,k; ArcNode *p; printf(请输入无向邻接表的的顶点数和边数:n); scanf(%d%d,&UALG.vexnum,&UALG.arcnum); for(i=0;iUALG.vexnum;i+) UALG.verticesi.data=A+i; UALG.vertices

8、i.firstarc=NULL; for(k=0;kadjvex=j; p-nextarc=UALG.verticesi.firstarc; UALG.verticesi.firstarc=p; p=(ArcNode *)malloc(sizeof(ArcNode); p-adjvex=i; p-nextarc=UALG.verticesj.firstarc; UALG.verticesj.firstarc=p; void CreateUDN(MGraph &G,int a)/若a=1的时候创建无向邻接矩阵,否则创建有向邻接矩阵 int i,j,k,w; char v1,v2; printf(

9、请输入邻接矩阵的顶点数和边数:n); scanf(%d%d,&G.vexnum,&G.arcnum); getchar(); for(i=0;iG.vexnum;i+) scanf(%c,&G.vexi); for(i=0;iG.vexnum;i+) for(j=0;jG.vexnum;j+) G.arcij.adj=INFINITY; for(k=0;kG.arcnum;k+) getchar(); scanf(%c %c %d,&v1,&v2,&w); i=locatevex(G,v1); j=locatevex(G,v2); G.arcij.adj=w; if(a=1) G.arcji.

10、adj=G.arcij.adj; void shuchu(ALGraph ALG)/遍历邻接表并输出 int i; ArcNode *p; for(i=0;inextarc) printf(%d ,p-adjvex); printf(n); void Degree(ALGraph ALG,ALGraph InsertALG)/计算邻接表的度=邻接表的出度+逆邻接表的的出度 int i; ArcNode *p; for(i=0;inextarc) ALG.verticesi.count+; for(i=0;inextarc) InsertALG.verticesi.count+; for(i=0

11、;iadjvex) dfs(UALG,p-adjvex); p=p-nextarc; void DFSTraverse(ALGraph UALG) for(int i=0;iUALG.vexnum;i+) visiti=0; for(i=0;iUALG.vexnum;i+) if(!visiti) dfs(UALG,i); printf(n);void BFSTraverse(ALGraph UALG)/广度优先遍历 ArcNode *p; int v; queueq; for(int i=0;iUALG.vexnum;i+) visiti=0; for(i=0;iadjvex) visitp

12、-adjvex=1; printf(%cn,UALG.verticesp-adjvex.data); q.push(p-adjvex); p=p-nextarc; void prim(MGraph G,char v)/用prim算法求最小生成树 int i,j,k,min,n; k=locatevex(G,v); for(i=0;iG.vexnum;i+) if(i!=k) closedgei.adjvex=v; closedgei.lowcost=G.arcki.adj; closedgek.lowcost=0; for(i=1;iG.vexnum;i+) min=INFINITY; for

13、(j=0;jG.vexnum;j+) if(closedgej.lowcost!=0&closedgej.lowcostmin) n=j; min=closedgej.lowcost; printf(%c %cn,closedgen.adjvex,G.vexn); closedgen.lowcost=0; for(j=0;jG.vexnum;j+) if(G.arcnj.adjclosedgej.lowcost&G.arcnj.adj!=INFINITY) closedgej.adjvex=G.vexn; closedgej.lowcost=G.arcnj.adj; printf(n);int

14、 indegreemax_vertex_num;int topsort(ALGraph ALG,ALGraph InsertALG)/拓扑排序 ArcNode *p; stacks; int i,k,count; for(i=0;inextarc) InsertALG.verticesi.count+; for(i=0;iALG.vexnum;i+) indegreei=InsertALG.verticesi.count; printf(%dn,indegreei); for(i=0;inextarc) k=p-adjvex; indegreek-; if(indegreek=0) s.pus

15、h(k); if(countALG.vexnum) return -1; else return 1;void short_dij(MGraph G,int v0,int *P,int *D)/用dij球最短路径 int i,v,w,min; for(i=0;iG.vexnum;i+) finiali=0; Di=G.arcv0i.adj; if(DiINFINITY) Pi=v0; Dv0=0;finialv0=1; for(i=1;iG.vexnum;i+) min=INFINITY; for(w=0;wG.vexnum;w+) if(finialw=0) if(Dwmin) v=w; m

16、in=Dw; if(minINFINITY) finialv=1; else break; for(w=0;wG.vexnum;w+) if(finialw=0&min+G.arcvw.adjDw) Dw=min+G.arcvw.adj; Pw=v; printf(%d ,Pw); printf(n); printf(路径长度为:n); for(i=0;iG.vexnum;i+) if(Di=INFINITY) printf(无法到达!n); else printf(%dn,Di); int main() int menu; char V; do void print(); scanf(%d,

17、&menu); switch(menu) case 1: CreateALGraph(ALG,InsertALG);break; case 2: shuchu(ALG); break; case 3: CreateALGraph(ALG,InsertALG);Degree( ALG, InsertALG);break; case 4: CreateALGraph(ALG,InsertALG);topsort( ALG,InsertALG);break; case 5: CeratUALGraph(UALG);DFSTraverse(UALG);break; case 6: CeratUALGraph(UALG);BFSTraverse(UALG);break; case 7: CreateUDN(G,1);printf(请输入出发顶点:n);scanf(%c,&V);prim(G,V);break; case 8: CreateUDN(G,0);short_dij( G, 0,P,D);break; case 0: return 0; while(menu!=0); return 0;

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

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