1、G, GrphKind k)/ 采用数组邻接矩阵表示法,构造图/构造有向网G int i,,; har v,;G.ind=kd; /图的种类prntf(输入要构造的图的顶点数和弧数:n); scnf(%,%d,&G.em,G.am);gechar();/过滤回车 prnt(依次输入图的顶点名称ABCD.等等:n); or (i=;iGexm; i+)cnf(c,&Gvi);/构造顶点数据gtha();/过滤回车 o (i; i头顶点名,权值 输入数据:如-B,2n); se prnt(按照: 尾顶点名-头顶点名输入数据:n);for (k=; k%c,%d,,w,&q); /输入弧的两个定点及
2、该弧的权重 lse saf(-%c,v,&w); char(); or(i0;i.vex;+) if(.vexsi=v) brek;/查找出v在vexs中的位置i i(=G.vexnum) cerrvete ERR!;exit(1); or(j=0;Gvxnu; j+)f(Gvexj=w) break;/查找出v在vexs中的位置 if(j=G.nm) cerr头顶点名,权值 输入数据:如A-B,23ab,5c,8-b,7,4d-c,3输出邻接矩阵 5| 8 | 4| | | | | | | | | 3| Pres any kytoconine*/voidPntGrap(MGa &)ti,j;
3、 swch(.kind) cas DG: for (0; iG.vexnum;i+) fo(j=0; jG.exu; j+) prin( 2.d|,Grsj); pintf(n); beak; cas D: fr (i0; .vexnm; i) for (j=0;Gvxnm; j+) i(G.arcsij!=Maalue) printf(%2.| ,Garcsi); lse prinf( |); prit(n reak; cseAG: fo(i=0;G.vxnm; i+) for (=0; Gvenum; j+) pnf( .d ,arci); prntf( eak; ceAN: /*完成构造
4、无向网* /* 请模仿编写无向网*/ for (i=0; G.venm; fr (j=0;.em;j) i(G.arcsi!=MaValue)rintf( %.d ,G.asj); s pritf( pitf(n brea; /*完成函数*vod cudig(MGrap G) /请完成计算图的入度或初度 (G.kind=DG|G.ind=) /计算有向图或网的各个顶点的入度与出度 n out,inD; ni,j; fr(i0;iG.ven;+)outDinD=0; for(j=;jG.vexnum;+) if(G.arj!=0&G.arcs!=xale) otD+; for(j=0;) if(
5、G.rc!=&G.rsji!=MaxVue) inD+; pritf(%c:出度是%d,入度是%dn,.vxs,outD,inD);l / 计算无向图或网的度in i,j; int u; for(i=0;G.vexum;+) u=0; for(=0;G.exum;j+) if(rsij!0&G.arcij!=axlue) Du+; pntf(%c的度是dn,G.vexs,Du); *参照p25设计深度有限搜索*vod DFMtix(MGraph ,i i,int n,ool*vstd) outG.ve visidi=tre; for(intj=;n;+) if(.rcsij!=&G.asi!=
6、axValu!visedj) FSMarx(G,j,,visted);/*参照26设计广度有限搜索*voi BSMatrx(MGah G,nt i,int , bool*visied) ot int axSie;int qMaize=0; infron=0,rear=0;otGvexsi visitedi=ue; q+rea=; while(ont!=rr) ront=(front+)%axize; int k=ont; for(int j=0; f(.arcsij!.arcsij!MaxValue&!visitedj) coutG.vsj; visiejtrue; rear=(ra+1)%M
7、xSie; qrear=j; voidmin()MGh G; int k; printf(请选择图的种类:0:有向图,:有向网,:无向图,:无向网. 请选择: sanf(%d,k); switch() /DG,D,G,ANcase 0: printf(构造有向图n Crateaph(G,DG); /采用数组邻接矩阵表示法,构造有向图 beak;cae 1: pit(构造有向网n teGrah(G,DN); / 采用数组邻接矩阵表示法,构造有向网AGG break;cse 2: rit(构造无向图n CreatGraph(,A); / 采用数组邻接矩阵表示法,构造无向图A brea; case3
8、: rintf(构造无向网nCreataph(G,AN); / 采用数组邻接矩阵表示法,构造无向网AGGbrek; PriMrh(); /打印图的邻接矩阵bool*visited=new boolGvexnm;it i; cut按图的邻接矩阵得到的深度优先遍历序列enl; for(i0;+) visteifals;DFSMatrx(G,G.vexnu,visite);按图的邻接矩阵得到的广度优先遍历序列endl; for(i=;i.exnum;i+) visitedi=false;FSMatix(G,0,G.vexnum,visited);outbc-cb#iclude#ncude hiclu
9、de dlb.h#include typdef car eteType; /顶点的名称为字符onst int MaxVerteNu =0;/图的最大顶点数cnst nt axEdeNum 100; /边数的最大值typedef int Wightype; /权值的类型cnt WghtType MxVaue =32; /权值的无穷大表示typedVreype VlstMaVerexNm;/顶点信息,定点名称 /邻接矩阵typedefenum G,D,G,ANGraphKind; /有向图,有向网,无向图,无向网strctEgeNod /链表边结点,表示弧int avex; 存放与头结点顶点有关的
10、另一个顶点在邻接表(数组)中的下标。 deoe*ext; /指向链表下一个结点 Weigypeinfo; / 权重值,或为该弧相关信息;typed struod /邻接表,表示顶点 VtxType data; / 顶点数据,顶点名称 EdgeNoe *frarc;/ 指向边结点链表第一个结点 od, jListMaVerxN;typeef suct AdjList vtices;nt vexum, arcnum; /图的当前顶点数和弧数 Graphd knd; / 图的种类标志Aap;oid CeateGraph_DG(ALGrph &G)/构造有向图G EdgeNoe *p; nt i,j,
11、k; char v,w; Gkind=DG; /图的种类 pritf(输入要构造的有向图的顶点数和弧数:scanf(%d,%d,&G.venum,&G.anu); ear(); pritf(依次输入图的顶点名称AC.等等:n); for (i0;.vexnum;i+)scan(G.ertcesi.data); G.veriesi.istarc=NULL; /初始化指向链表指针 getr();printf(尾顶点名-头顶点名 输入数据:如AB n); for (k=0;kG.arcum; ) caf(%-%c,&);gehar(); or(i=0; if(G.vtici.dat=v) break
12、;/查找出v在vertices中的位置 if(i=G.vxu) cerrvetex RROR!; fo(j=0;.vexnum;j) if(G.vecejdat=w) ba;/查找出w在veices中的位置i if(j.vexnum) errajvej; 置入弧尾顶点号 p-ino =MaVlue; /图的权值默认为无穷大 ext=.vrtiesi.stc; /插入链表 Gvricsi.irtarcp;/oid CreateGraph_DN(LGph &G)/构造有向网G EeNod *p; int,,k; chrv,w; Wightype q;G.ind=DN; /图的种类 prit(输入要
13、构造的有向网的顶点数和弧数: sn(%d,%d,G.xnum,&G.arcu); etcha(); pint(依次输入图的顶点名称ACD.等等:); fo(0;Gvxnum;i+) canf(cG.vertisi.daa);/构造顶点数据 G.verticeiistrc=NLL; /初始化指向链表指针gtcar(); prntf(头顶点名,权值输入数据:如A-B,8 n);for (k0;G.arcnum; k+) scanf(%c%c,%,&v,&,); gthar(); o(=0;.exu; +) if(G.verticesata=v) brea;/查找出v在ertics中的位置i f(=
14、G.vxn) crvere RROR!; for(j=0;vxnum;j+) if(Gertcsj.data=w)brak;/查找出w在ercs中的位置 if(G.ex) erifo =q; /图的权值默认为无穷大 p-ex=Gvertic.firta; G.veticesi.firstar=; vid Cateph(ALGrph &)构造无向图 EgeNde *; in i,k;carv,w;kid=G; /图的种类pritf(输入要构造的有向图的顶点数和弧数:scanf(%,%.enum,&.arnum); gechar(); rint(依次输入图的顶点名称D.等等: or (i=0;G.vexum;i+) scan(%c.vrest); G.eticesiirstrc=NULL; /初始化指向链表指针getchar();/过滤
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1